可选类|番石榴|爪哇
简介: Optional 是一个 不可变对象 ,它可能包含对另一个对象的非空引用。这种类型的每个实例要么包含一个非空引用,要么不包含任何内容,在这种情况下,我们说引用不存在。从来没有说过它包含 null。
示例:当在 Hashmap 中找不到键时,Hashmap.get(key)可能会返回 null,但如果键存在但值为 null,它也可能会返回 null。 可选类可用于可能使用空对象的地方 。
可选类没有构造函数,但是提供 3 个公共静态方法来获取类的实例。
- 可选。fromNullable(T) 允许在新的可选实例中提供和包装空或非空引用。
- 如果传入的参数为 null,则该实例没有存储任何引用,并且是“不存在”的实例。
- 如果传入的参数不为空,则该非空引用存储在新的可选实例中。
- Optional.of(T) 的作用类似于 Optional.fromNullable(T),只是它期望向它传递一个非空参数。如果将 null 传递给它,则会抛出一个null pointerexception。
- Optional . exceled()当一个人的代码知道将被提供给 Optional.fromNullable(T)的参数为 null 时,它是很有用的,并且它比应该返回的 Optional 的“缺席”版本更容易表达。
一旦获取了可选的实例,就可以在该实例上调用几个实例方法。例如, Optional.isPresent() 方法对于确定给定的 Optional 实例中是否包含非空参数非常有用。一旦知道可选实例包含非空引用, Optional.get() 方法返回存储的非空引用。
注意:如果没有非空引用,调用此方法时会引发异常。所以,还是先调用 isPresent()比较好。
申报:
@GwtCompatible(serializable = true)
public abstract class Optional<T>
extends Object
implements Serializable
Where, T is the type of instance that can be contained.
可选类方法:
示例:
// Java code to show implementation of
// Guava Optional class
import java.util.ArrayList;
import java.util.List;
import com.google.common.base.Optional;
import static com.google.common.base.Strings.emptyToNull;
class GuavaLibrary {
// Driver code
public static void main(String[] args)
{
// Creating a List of Strings
List<String> myList = new ArrayList<String>();
// Adding values to the Strings
myList.add("Geeks");
myList.add("for");
myList.add("GeeksClasses");
myList.add(null);
myList.add("GeeksforGeeks");
myList.add("");
myList.add("Data Structures");
// Displaying values using Java Nulls
displayValuesUsingJavaNulls(myList);
// Displaying values using Guava Optional
displayValuesUsingGuavaOptional(myList);
}
// Method to display values using Java Nulls
public static void displayValuesUsingJavaNulls(List<String> myList)
{
System.out.println("Displaying values using Java Nulls");
// For every String in myList
for (String str : myList) {
if (str == null || str.isEmpty()) {
System.out.println("String : Value is empty or not available");
}
else {
System.out.println("String : " + str);
}
}
System.out.println();
}
// Method to display values using Guava Optional
public static void displayValuesUsingGuavaOptional(List<String> myList)
{
System.out.println("Displaying values using Guava Optional");
// For each String in myList
for (String str : myList) {
Optional<String> optionalName = Optional.fromNullable(emptyToNull(str));
System.out.println("String : " + optionalName.or("String : Value is empty or not available"));
}
}
}
输出:
Displaying values using Java Nulls
String : Geeks
String : for
String : GeeksClasses
String : Value is empty or not available
String : GeeksforGeeks
String : Value is empty or not available
String : Data Structures
Displaying values using Guava Optional
String : Geeks
String : for
String : GeeksClasses
String : String : Value is empty or not available
String : GeeksforGeeks
String : String : Value is empty or not available
String : Data Structures
下面给出的是番石榴可选类提供的一些其他方法:
番石榴自选类 Vs 爪哇. util .自选T3】
- 番石榴可选类是可序列化的,但是 java.util.Optional 不是。
- java.util.Optional 具有额外的方法 ifPresent、filter、flatMap 和 orElseThrow。
- java.util.Optional 提供了 OptionalInt、OptionalLong 和 OptionalDouble 这三个原始专用版本,但是 Guava 没有这些版本。
参考:T2】谷歌番石榴
版权属于:月萌API www.moonapi.com,转载请注明出处