【发布时间】:2020-06-18 14:36:21
【问题描述】:
10 多年前,我向this question 询问了有关 C# 的问题,并在那里得到了很好的答案。现在我正在尝试在 Java 中做同样的事情。
假设我有一个抽象类Animal。我想要那个类中的静态方法create(),它将返回一个类型的值,无论 subclass 是什么类型。我使用以下结构在 C# 中管理它:
public class Animal<T> where T : Animal<T>, new()
{
public static T Create()
{
var t = new T();
// do generic stuff on the new T instance
return t;
}
}
public class Dog : Animal<Dog>
{
}
//usage:
var dog = Dog.Create();
这在 C# 中很有用。但现在我正试图在 Java 中复制这种结构,并碰壁。一大堵墙似乎是you can't have static generic members。因此,这似乎有点引人注目。但我是一个乐观的人,也许那里的一些 Java 专家已经提出了一种完全开箱即用的模式来或多或少地实现我在这里尝试做的事情?
【问题讨论】: