Java 8 可选类
每个Java程序员都熟悉 NullPointerException。它可能会使您的代码崩溃。如果不使用过多的空检查,就很难避免它。因此,为了克服这个问题, Java 8 在Java.util 包中引入了一个新类 Optional。它可以帮助编写简洁的代码,而无需使用太多的空检查。通过使用 Optional,我们可以指定要返回的替代值或要运行的替代代码。这使得代码更具可读性,因为隐藏的事实现在对开发人员可见。
Java
// Java program without Optional Class
public class OptionalDemo {
public static void main(String[] args)
{
String[] words = new String[10];
String word = words[5].toLowerCase();
System.out.print(word);
}
}
Java
// Java program with Optional Class
import java.util.Optional;
public class OptionalDemo {
public static void main(String[] args)
{
String[] words = new String[10];
Optional checkNull
= Optional.ofNullable(words[5]);
if (checkNull.isPresent()) {
String word = words[5].toLowerCase();
System.out.print(word);
}
else
System.out.println("word is null");
}
}
Java
// Java program to illustrate
// optional class methods
import java.util.Optional;
class GFG {
// Driver code
public static void main(String[] args)
{
// creating a string array
String[] str = new String[5];
// Setting value for 2nd index
str[2] = "Geeks Classes are coming soon";
// It returns an empty instance of Optional class
Optional empty = Optional.empty();
System.out.println(empty);
// It returns a non-empty Optional
Optional value = Optional.of(str[2]);
System.out.println(value);
}
}
Java
// Java program to illustrate
// optional class methods
import java.util.Optional;
class GFG {
// Driver code
public static void main(String[] args)
{
// creating a string array
String[] str = new String[5];
// Setting value for 2nd index
str[2] = "Geeks Classes are coming soon";
// It returns a non-empty Optional
Optional value = Optional.of(str[2]);
// It returns value of an Optional.
// If value is not present, it throws
// an NoSuchElementException
System.out.println(value.get());
// It returns hashCode of the value
System.out.println(value.hashCode());
// It returns true if value is present,
// otherwise false
System.out.println(value.isPresent());
}
}
输出:
Exception in thread "main" java.lang.NullPointerException
为了避免异常终止,我们使用了 Optional 类。在下面的示例中,我们使用 Optional。因此,我们的程序可以在不崩溃的情况下执行。
上面的程序使用了Optional Class
Java
// Java program with Optional Class
import java.util.Optional;
public class OptionalDemo {
public static void main(String[] args)
{
String[] words = new String[10];
Optional checkNull
= Optional.ofNullable(words[5]);
if (checkNull.isPresent()) {
String word = words[5].toLowerCase();
System.out.print(word);
}
else
System.out.println("word is null");
}
}
word is null
Optional 是一个容器对象,它可能包含也可能不包含非空值。您必须导入Java.util 包才能使用此类。如果存在值, isPresent()将返回 true,而get()将返回该值。提供了依赖于包含值是否存在的其他方法,例如orElse()如果值不存在则返回默认值, ifPresent()如果值存在则执行代码块。这是一个基于值的类,即它们的实例是:
- 最终的和不可变的(尽管可能包含对可变对象的引用)。
- 仅基于 equals() 被视为相等,而不是基于引用相等 (==)。
- 没有可访问的构造函数。
静态方法:静态方法是Java中无需创建类对象即可调用的方法。它们由类名本身或对该类的对象的引用来引用。
句法 :
public static void geek(String name)
{
// code to be executed....
}
// Must have static modifier in their declaration.
// Return type can be int, float, String or user-defined data type.
要点:由于静态方法属于类,因此可以在不创建类的对象的情况下调用它们。下面给出了一些关于静态方法的要点:
- 静态方法与它们所在的类相关联,即即使不创建类的实例也可以调用它们。
- 它们的设计目的是在从同一类创建的所有对象之间共享。
- 静态方法不能被覆盖。但是可以重载,因为它们是在编译时由编译器使用静态绑定解决的。
下表显示了 Optional Class 提供的静态方法列表:
实例方法:实例方法是需要在调用它之前创建其类的对象的方法。要调用实例方法,我们必须创建定义它的类的对象。
句法 :
public void geek(String name)
{
// code to be executed....
}
// Return type can be int, float String or user defined data type.
要点:实例方法可以在它们所在的同一类中调用,也可以从同一包或其他包中定义的不同类中调用,具体取决于提供给所需实例方法的访问类型。下面给出了有关实例方法的一些要点:
- 实例方法属于类的对象,而不是类,即它们可以在创建类的对象后调用。
- 从该类创建的每个单独的对象都有它自己的该类的实例方法的副本。
- 它们可以被覆盖,因为它们是在运行时使用动态绑定解决的。
下表显示了可选类提供的实例方法列表:
具体方法:具体方法是指,该方法具有完整的定义,但可以在继承的类中被覆盖。如果我们将此方法设为final ,则它不能被覆盖。声明方法或类“final”意味着它的实现已经完成。重写抽象方法是强制性的。如果它们不是最终的,则可以在继承的类中覆盖具体方法。下表显示了可选类提供的具体方法列表:
下面给出了一些例子:
示例 1:
Java
// Java program to illustrate
// optional class methods
import java.util.Optional;
class GFG {
// Driver code
public static void main(String[] args)
{
// creating a string array
String[] str = new String[5];
// Setting value for 2nd index
str[2] = "Geeks Classes are coming soon";
// It returns an empty instance of Optional class
Optional empty = Optional.empty();
System.out.println(empty);
// It returns a non-empty Optional
Optional value = Optional.of(str[2]);
System.out.println(value);
}
}
Optional.empty
Optional[Geeks Classes are coming soon]
示例 2:
Java
// Java program to illustrate
// optional class methods
import java.util.Optional;
class GFG {
// Driver code
public static void main(String[] args)
{
// creating a string array
String[] str = new String[5];
// Setting value for 2nd index
str[2] = "Geeks Classes are coming soon";
// It returns a non-empty Optional
Optional value = Optional.of(str[2]);
// It returns value of an Optional.
// If value is not present, it throws
// an NoSuchElementException
System.out.println(value.get());
// It returns hashCode of the value
System.out.println(value.hashCode());
// It returns true if value is present,
// otherwise false
System.out.println(value.isPresent());
}
}
Geeks Classes are coming soon
1967487235
true