0

我不知道如何给它起一个更好的标题,因为我真的不知道这种模式在 Java 中叫什么。

现在我有一个带有这个签名的方法:

public Directory getDirectory(Class<? extends Directory> type) { ... }

你这样称呼它:

MyDirectory directory = (MyDirectory)getDirectory(MyDirectory.class);

对类型的约束确保MyDirectory必须从Directory.

我真正想做的是避免强制转换并减少所需的代码量。在 C# 中,你可以说:

MyDirectory directory = getDirectory<MyDirectory>();

有没有办法在Java中做到这一点或类似的东西?自 1.4 版以来,我没有编写任何 Java 代码!

4

2 回答 2

11
public <T extends Directory> T getDirectory(Class<T> type) { ... }

MyDirectory directory = getDirectory(MyDirectory.class);
于 2011-04-27T15:12:37.020 回答
4

好吧,您可以通过将方法本身更改为通用来避免强制转换:

public <T extends Directory> T getDirectory(Class<T> type)

接着:

MyDirectory directory = getDirectory(MyDirectory.class);

在这里,您使用参数的类型推断来确定T.

但是你必须传入Class<T>,否则类型擦除将启动,并且该方法将不知道创建实例的类型:(

有关类型擦除的更多详细信息以及与 Java 泛型有关的所有其他内容,请参阅 Angelika Langer 的Java 泛型常见问题解答

于 2011-04-27T15:15:09.227 回答