这是一个人为的代码示例,但基于 Android 项目的真实测试场景。它涉及使用类构造函数来确定类的有效性(确保其处于正确的使用状态)。在这种情况下,只需检查类构造函数在返回类的实例之前不会引发异常:
public class MyTestClass {
private MyTestClass() {
// Some code which might throw an exception
}
public static MyTestClass getInstance() {
if (tryClassConstructor(MyTestClass::new)) {
return new MyTestClass();
}
return null;
}
private static boolean tryClassConstructor(Runnable condition) {
try {
condition.run();
} catch (ArithmeticException ex) {
return false;
}
return true;
}
}
我知道 getInstance() 正在将构造函数方法引用 (MyTestClass::new) 传递给它的 tryClassConstructor() 方法,但该方法需要......一个 Runnable。那么这是否意味着类默认构造函数默认是可运行的?
最佳答案
您可以在Runnable
中执行以下操作:
Runnable r = () -> {
new MyTestClass();
};
请注意,它不会返回 MyTestClass
的实例:它只是调用构造函数并丢弃该实例。
这就是当您将其用作 Runnable
时 MyTestClass::new
所做的全部事情。
您可以执行此操作,因为 MyTestClass::new
是与 void 兼容的。 new MyTestClass()
是一个语句表达式,因此它可以单独作为一条语句。
关于java - <class>::new 如何成为 Runnable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56137050/