我觉得答案是“不”,但我想我会问以防万一......
伪代码:
Foo foo = new Foo();
if(foo != null){
foo.useMe();
}else{
System.out.println("foo failed to initialize");
}
在Foo中我需要做些什么来实现这一目标?
答案 0 :(得分:7)
不,没有办法让新对象成为null
。当然,这假设构造函数中没有错误,但如果存在错误,那么无论如何都无法使用该变量。
有关类实例创建表达式的更多信息,我建议使用language specification。
答案 1 :(得分:6)
通常情况下,您只需要为此情况抛出异常。您可以轻松编写自己的异常,或者只使用throw new Exception("foo failed to initialize");
之类的内容并捕获它。
编写自己的例外:http://www.javaplex.com/blog/java-creating-custom-exceptions/
答案 2 :(得分:3)
不,构造函数没有返回值,但每当使用“new”时,您都会创建对对象的引用。我想你想要的是:
class Factory
{
static MyClass getMyClass()
{
if(true or false expression)
return new MyClass();
else if(true or false expression)
return null;
}
}
然后你可以像这样创建你的类
MyClass bla = Factory.getMyClass();
if(null)
do something
答案 3 :(得分:3)
我知道这是不可能的;但出于好奇,我尝试了一段代码。
public class Test {
public Test () {
this = null;
}
}
当然,由于“这个”是最终的,所以无法编译。
答案 4 :(得分:1)
不,这是不可能的。按照惯例,如果对象无法初始化,则抛出异常。
答案 5 :(得分:1)
不,这是不可能的 - 但是你可以在构造函数中抛出一个已检查的异常,如果你真的想要这种类型的行为,那么需要在另一端捕获它。
在处理构造函数中的错误方面,Java专家时事通讯不久前就讨论了这个主题。可能值得一读:http://www.javaspecialists.eu/archive/Issue120.html
答案 6 :(得分:1)
不,构造函数不可能返回null。如果创建对象时出现问题,那么构造函数应抛出异常。
以FileInputStream
类为例。该类用于从文件中读取数据。如果将不存在的文件传递给构造函数,则会抛出FileNotFoundException
:
try{
FileInputStream in = new FileInputStream("file.txt");
} catch (FileNotFoundException e){
System.out.println("File 'file.txt' doesn't exist.");
}
答案 7 :(得分:0)
它必须是构造函数吗?如果这确实是您所需要的,为什么不使用可以返回Foo的新实例或null的函数?