optional là gì

Optional class là gì? Optional Class vô Java 8

Optional Class vô Java 8

Bạn đang xem: optional là gì

Optional Class là 1 tác dụng mới nhất vô được bổ sung cập nhật vô Java 8
Optional
là 1 đối tượng người tiêu dùng generic, thực chất của Optional là một container (bao chứa) chứa chấp đối tượng người tiêu dùng nhưng mà nó reference cho tới. Nó hoàn toàn có thể trống rỗng hoặc chứa chấp độ quý hiếm NULL (trường hợp ý đối tượng người tiêu dùng nhưng mà nó reference cho tới bị null). Cấu trúc này đáp ứng những đổi thay được dùng trải qua Optional Class tiếp tục tránh khỏi lỗi NullPointerException.

Ví dụ 1:

Mình có một method tìm hiểu đối tượng người tiêu dùng Person theo dõi id findById

public class Person { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static Person findById(int id) { //do something return ...; } public static void main(String[] args) { Person person = Person.findById(1); System.out.println(person.getName()); } }

Trường hợp ý bên trên hoàn toàn có thể tiếp tục xẩy ra lỗi NullPointerException nếu như method findById trả về độ quý hiếm null, nhằm xử lý đặc điểm này tất cả chúng ta cần đánh giá null mang lại Search Engine Results Page kể từ method findById hoặc hoàn toàn có thể sử dụng 1 Optional Class nhằm xử lý như sau:

public static void main(String[] args) { Person person = Person.findById(1); // xử trí thông thường //if (person != null) { // System.out.println(person.getName()); //} // xử trí với Optional Class // sử dụng ofNullable vì như thế đối person hoàn toàn có thể null Optional<Person> optionalPerson = Optional.ofNullable(person); // ifPresent: đánh giá đối tượng người tiêu dùng bên phía trong optional với không giống null không optionalPerson.ifPresent(p -> System.out.println(p.getName())); }

Ví dụ 2:

import java.util.Optional; public class DemoOptionClass { public static void main(String args[]) { Integer value1 = null; Integer value2 = new Integer(10); // Optional.ofNullable - được chấp nhận truyền vô độ quý hiếm null. Optional<Integer> a = Optional.ofNullable(value1); // Optional.of - ném đi ra lỗi NullPointerException nếu như độ quý hiếm truyền vô vị null Optional<Integer> b = Optional.of(value2); System.out.println(sum(a, b)); } public static Integer sum(Optional<Integer> a, Optional<Integer> b) { // Optional.orElse - trả về 1 độ quý hiếm không giống, nếu như độ quý hiếm vô optional class vị null // Tại trên đây bản thân tiếp tục trả về 0 nếu như độ quý hiếm vô option class a = null Integer value1 = a.orElse(new Integer(0)); // Optional.get - trả về độ quý hiếm bên phía trong optional class Integer value2 = b.get(); return value1 + value2; } }

Kết quả:

Xem thêm: aspiration là gì

10

 

Một số method hoặc sử dụng vô Option Class

 

Phương thức & tế bào tả
static <T> Optional<T> empty()
Trả về một Optional instance trống rỗng.
Optional<T> filter(Predicate<? super <T> predicate)
Nếu như có mức giá trị hiện hữu vô đối tượng người tiêu dùng Optional này và độ quý hiếm của chính nó khớp với Predicate truyền vô, nó sẽ bị trả về một Optional chứa chấp độ quý hiếm cơ, đem không giống tiếp tục trả về một Optional trống rỗng.
T get()
Nếu như có mức giá trị vô Optional này, nó sẽ bị trả về độ quý hiếm cơ, ngược lại tiếp tục ném đi ra NoSuchElementException nếu mà đối tượng người tiêu dùng trống rỗng.
void ifPresent(Consumer<? super T> consumer) 
Nếu như đối tượng người tiêu dùng Optional đang được chứa chấp độ quý hiếm, nó sẽ bị vận dụng consumer được truyền vô mang lại độ quý hiếm của chính nó. trái lại thì ko làm những gì cả.
boolean isPresent()
Phương thức này được dùng nhằm đánh giá coi vô đối tượng người tiêu dùng Optional với đang được chứa chấp độ quý hiếm hay là không. Giá trị trả về là True nếu như có mức giá trị và ngược lại trả về false.
static <T> Optional<T> of(T value)
Trả về đối tượng người tiêu dùng Optional loại T chứa chấp độ quý hiếm của value.
static <T> Optional<T> ofNullable(T value)
Trả về một Optional chứa chấp độ quý hiếm được truyền vô nếu như không giống null, ngược lại tiếp tục trả về một Optional trống rỗng.
T orElse(T other)
Trả về độ quý hiếm của đối tượng người tiêu dùng Optional nếu như với, ngược lại nó sẽ bị trả về đối tượng other mà các bạn vẫn truyền vô cách thức này.
T orElseGet(Supplier<? extends T> other)
Trả về độ quý hiếm nếu như tồn bên trên, ngược lại nó sẽ bị gọi other mà các bạn vẫn truyền vô tiếp sau đó trả về sản phẩm của Supplier.
<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
Nếu như đối tượng người tiêu dùng Optional có mức giá trị tồn bên trên thì nó sẽ bị trả về độ quý hiếm cơ, ngược lại tiếp tục ném đi ra một Exception tự tất cả chúng ta khái niệm vị Supplier vẫn truyền vô.

 

References:

https://www.tutorialspoint.com/java8/java8_optional_class.htm

Xem thêm: cell wall là gì