2017-02-18 166 views
3

我提前道歉,我确信之前已经问过这个问题,但我是一个自学的程序员,所以我不能为我的生活弄清楚术语I需要搜索。获得泛型类型的泛型类型

我有一个泛型类:

public abstract class Directory<T extends Key> 

这是另一个类的泛型参数:

public class TagDescriptor<T extends Directory, U extends Key> 

的的TagDescriptorU永远是Directory作为第一个通过的泛型参数参数。没关系通过T,但没有办法推断U?我试过这样的东西:

​​

但是这是不正确的。在编译时它应该知道Directory有一个通用的;我可以利用这一点吗?

+5

'公共类TagDescriptor ,U扩展密钥>'。 [Works here](http://ideone.com/8r4pHJ)。 –

回答

1

你可以声明多个类型参数界与自我参照:

public class TagDescriptor<K extends Key, T extends Directory<K>> 

NB:K通常是used, as a name, for key types

至于,为什么有必要声明类型参数K?这很简单:因为否则编译器无法告诉K是什么:一个具体的类,一个名为K的接口?或者一个名为K的类型参数?

举例来说,这将是完全合法的:

public interface K {} 

public class TagDescriptor<T extends Directory<K>> 
+0

是的,但这是多余的,我的问题,如果它是不明确的是:“为什么不'目录'本身并不足以”,'K'是在'目录' – Anthony

+0

哦这种情况下定义的,确保没有名称冲突只是冗长而已。我甚至没有考虑单字符类/接口。谢谢。 – Anthony