我提前道歉,我确定之前有人问过这个问题,但我是一个自学成才的程序员,所以我终究无法弄清楚我需要搜索的术语。
我有一个泛型类:
public abstract class Directory<T extends Key>
是另一个类的泛型参数:
public class TagDescriptor<T extends Directory, U extends Key>
TagDescriptor
的U
将始终是作为第一个参数传递的Directory
的通用参数。通过T
就可以了,但是U
就没有办法推断了吗?我试过类似的东西:
public class TagDescriptor<T extends Directory<U>>
但这是不正确的。在编译时它应该知道 Directory
有一个泛型;我可以利用它吗?
最佳答案
您可以声明多个类型参数,并以自引用为界:
public class TagDescriptor<K extends Key, T extends Directory<K>>
注意:K
通常是 used, as a name, for key types .
至于,为什么要声明类型参数K?好吧,这很简单:因为否则编译器无法判断 K 是什么:一个具体的类,一个名为 K 的接口(interface)?还是名为 K 的类型参数?
例如,这将是完全合法的:
public interface K {}
public class TagDescriptor<T extends Directory<K>>
关于java - 获取泛型类型的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42321119/