繁体   English   中英

有没有办法让构造函数在 Java 中返回 == null 的 object?

[英]Is there a way to have a constructor return an object that == null in Java?

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

伪代码:

Foo foo = new Foo();

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

我必须在 Foo 中做什么才能使这成为现实?

不,没有办法让新对象为null 当然,这假定构造函数中没有错误,但如果存在错误,那么无论如何都将无法使用该变量。

有关类实例创建表达式的更多信息,我建议使用语言规范

通常情况下,您只需要为此情况抛出异常。 你可以轻松编写自己的异常,或者只使用throw new Exception("foo failed to initialize"); 抓住那个。

编写自己的例外: http//www.javaplex.com/blog/java-creating-custom-exceptions/

不,构造函数没有返回值,但无论何时使用“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

我知道这是不可能的; 但出于好奇,我尝试了一段代码。

public class Test {

  public Test () {
    this = null;
  }

}

当然,由于“这个”是最终的,因此无法编译。

不,这是不可能的。 按照惯例,如果对象无法初始化,则抛出异常。

不,这是不可能的 - 但是你可以在构造函数中抛出一个已检查的异常,如果你真的想要这种类型的行为,那么需要在另一端捕获它。

在处理构造函数中的错误方面,Java专家时事通讯不久前就讨论了这个主题。 可能值得一读: http//www.javaspecialists.eu/archive/Issue120.html

不,构造函数不可能返回null。 如果创建对象时出现问题,那么构造函数应抛出异常。

FileInputStream类为例。 该类用于从文件中读取数据。 如果将不存在的文件传递给构造函数,则会抛出FileNotFoundException

try{
  FileInputStream in = new FileInputStream("file.txt");
} catch (FileNotFoundException e){
  System.out.println("File 'file.txt' doesn't exist.");
}

11 年后,我们仍然有这个问题。 总结有效回复并添加一个想法:

想法 1:创建一个包装器 class 以像工厂一样工作。 如果数据有效,这个包装器 class 将创建内部 class 的新实例。 (来自 user975484)//如果你是单独工作,想法 1 很好,但如果你正在为学校或公司项目创建 object,那么你可能不允许使用工厂。

思路二:如果构造函数中的数据无效则抛出异常。 (来自 CamelSlack)//如果用户捕获并处理错误,想法 2 也很棒。 但是,学校或公司规定可能不允许您使用此方法。 我相信,如果您可以使用它,这可能是最好的解决方案。

思路三:object中函数校验数据后返回null或默认数据。 本质上,在运行函数之前运行数据验证。 //对于被迫遵循一套过于严格的要求的学生和员工来说,想法 3 可能是唯一的选择。 除非不能使用想法 1 和 2,否则真的没有用。

它必须是构造函数吗? 如果这真的是你需要的,为什么不使用一个可以返回Foo的新实例或null的函数?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM