有没有办法让构造函数在Java中返回一个== null的对象?

时间:2011-10-20 18:37:42

标签: java

我觉得答案是“不”,但我想我会问以防万一......

伪代码:

Foo foo = new Foo();

if(foo != null){
    foo.useMe();
}else{
   System.out.println("foo failed to initialize");
}

在Foo中我需要做些什么来实现这一目标?

8 个答案:

答案 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的函数?