获取泛型类型的泛型类型

3

提前道歉,我相信这个问题以前已经被问过,但我是一个自学的程序员,所以我无法确定我需要搜索的术语。

我有一个通用类:

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有一个泛型;我可以利用它吗?


5
公共类TagDescriptor<T extends Directory<U>, U extends Key>。 - Andy Turner
1个回答

1
你可以声明多个带有自我引用的类型参数
public class TagDescriptor<K extends Key, T extends Directory<K>>

NB:K通常作为键类型的名称使用。

至于为什么需要声明类型参数K?很简单:否则编译器无法确定K是什么:具体类、名为K的接口?还是名为K的类型参数?

例如,以下代码是完全合法的:

public interface K {}

public class TagDescriptor<T extends Directory<K>>

是的,但那是多余的,我的问题如果不清楚的话就是“为什么Directory<K>本身不足够”,在这种情况下,K被定义为Directory<K extends Key> - Anthony
哦,这只是冗长的代码,以确保没有名称冲突。我甚至没有考虑过单个字符的类/接口。谢谢。 - Anthony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接