gpt4 book ai didi

java - 在Java中,如何实现类似使用模板参数的功能,避免在C++中创建Creator子类?

转载 作者:行者123 更新时间:2023-11-29 08:23:13 26 4
gpt4 key购买 nike

最近在看《设计模式-可重用面向对象软件的基础》这本书时,书中有这样一段话:

Using templates to avoid subclassing. As we've mentioned, another potential problem with factory methods is that they might force you to subclass just to create the appropriate Product objects. Another way to get around this in C++ is to provide a template subclass of Creator that's parameterized by the Product class.

我想知道的是:在Java中,如何实现类似使用模板参数的功能,避免在C++中创建Creator子类?

我尝试过使用泛型,但我不知道如何使用它。

public class ConcreteCreator<T extends Product> extends Creator{

@Override
public Product createProduct() {
// ... how can I return new T();

}
}

最佳答案

// ... how can I return new T();

简单的回答:在 Java 中你没那么容易。

Java 不是 C++,泛型在很多方面不如 C++ 模板强大。

关键是:没有办法“一般地”创建一些未知的任意类的新对象。您可以通过使用反射、Class.forName()newInstance()解决这个问题,但这通常是反射(reflection)成本:它笨拙且容易出错。

当然,您可以返回一个特定的子类类型(和其中的实例),但是您必须为每个此类类型编写一个特定的方法。

关于java - 在Java中,如何实现类似使用模板参数的功能,避免在C++中创建Creator子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55686360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com