java - 如何通过类类型委托(delegate)构造函数的实例化?

标签 java generics java-8

我有几个扩展 BaseClass 的类。现在我想在 DelegatorContext 中静态定义一个 Activity 类,并且每个对象的创建都应该基于 Activity 上下文。

例子:

class BaseClass {
    String firstname, lastname;
}

class FirstClas extends BaseClass {}
class SndClass extends BaseClass {}

class DelegatorContext {
    public static BaseClass activeClass;
}

class Delegator {
    BaseClass create(String firstname, String lastname) {
        return DelegatorContext.activeClass instanceof FirstClass
          ? new FirstClass(firstname, lastname) : new SndClass(firstname, lastname);
    }
}

如果引入更多实体扩展 BaseClass,该示例将获得更多样板。

有没有更好的模式来解决我的问题?甚至可能使用 Java8 和 Functions?还是泛型?

我正在使用这个构造来能够在运行时切换实现...

最佳答案

我猜,你的意思是这样的:

interface BaseClassFactory {
    BaseClass create(String firstname, String lastname);
}
class DelegatorContext {
    public static BaseClassFactory active;
}

DelegatorContext.active=FirstClass::new;

DelegatorContext.active=SndClass::new;

这要求所有的子类都有一个具有相同签名的构造函数,匹配工厂接口(interface)的签名(有趣的是给了一个例子 this recent question )

你真的不需要其他工厂类,但为了完整起见,它将是:

class Delegator {
    BaseClass create(String firstname, String lastname) {
        return DelegatorContext.active.create(firstname, lastname);
    }
}

关于java - 如何通过类类型委托(delegate)构造函数的实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29408151/

相关文章:

java - jpa hibernate复合外键映射

java - 如何使其成为java中的通用方法?

Java - 如何仅使用 JVM Config 为某些协议(protocol)禁用 TLS 密码?

java - MappedByteBuffer在linux下使用mmap吗?

java - Google App Engine 查询在 Java 中不起作用

python - 正确的方法是使用类型提示/泛型来描述类型类 ("type"的参数)

jenkins - 不推荐使用 SonarQube 构建后操作

java - 如果两个接口(interface)包含相同的默认方法会怎样?

java 将对象转换为 PrintWriter

java - 在 Java 中使用泛型参数(必须扩展泛型类)扩展抽象方法