java - 如何通过静态工厂方法返回一个对象?

标签 java groovy constructor

我了解 Java 基础知识,现在我正在阅读 Effective Java。该书建议使用静态工厂方法而不是构造函数。所以我有这样的 Groovy 代码:

public class Anto {
    public static void main(String[] args) {
            println Java.javaInstance()
        }
}

class Java {
    public static Java javaInstance() {
        return this
    }
}

编译时出现如下错误:

Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'class Java' with class 'java.lang.Class' to class 'Java'
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'class Java' with class 'java.lang.Class' to class 'Java'
    at Java.javaInstance(Anto.groovy:9)
    at Java$javaInstance.call(Unknown Source)
    at Anto.main(Anto.groovy:3)

我哪里出错了?

最佳答案

您可以使用 return new Java(); 来完成。静态方法无法访问 this

编辑:

这些静态工厂通常是单例的,这意味着只能使用该类的一个实例(例如,通常是与数据库的连接)。如果您想将此维度添加到您的 Java 类,请使用如下私有(private)静态属性:

class Java {

    private static Java instance;

    public static Java javaInstance() {
        if(instance == null) {
            instance = new Java();
        }
        return instance;
    }

}

关于java - 如何通过静态工厂方法返回一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444615/

相关文章:

java - 我们是否需要更喜欢构造函数而不是静态工厂方法?如果是这样,什么时候?

java - 使用 XPath 检索 html 标签的内容

java - 使用 org.json 解析 Java 中 JSONArray 中的内部 JSON 文件

groovy - 将元组列表映射到 Groovy 中的第二个元素列表?

java - 两个类之间的属性依赖

c++是在参数化构造函数中调用的默认构造函数吗?

java - 使用 Tomcat 和 cookie 进行 session 管理

Java扫描器+排序

command-line - 直接从 url 启动 groovy 脚本

mysql - SOAPUI Groovy 解析 XML 响应并将其插入 mysql 数据库