这是一个人为设计的代码示例,但基于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
中执行以下操作:
Runnable r = () -> {
new MyTestClass();
};
请注意,这并不是返回
MyTestClass
的实例:它只是调用构造函数,并丢弃该实例。当您将
MyTestClass::new
用作Runnable
时,这就是全部。您可以执行此操作,因为
MyTestClass::new
与void兼容。 new MyTestClass()
是一个语句表达式,因此它可以作为语句独立存在。