2016-03-08 79 views
2

我不是一个Java程序员,所以如果我的术语有点偏离,请原谅我。我想声明如下:如何声明一个扩展参数化类型的类型变量?

public class Foo<T extends Bar<I, J, K>> { 
    .... 
}; 

我的IDE告诉我,它无法解析I,J或K.

就是我试图用Java做的可能还是应该我采取一些其他的方法?

回答

3

你必须申报所有类型参数:

public class Foo<I,J,K,T extends Bar<I, J, K>> { 
    .... 
} 
1

你不能声明他们含蓄地这样,你需要写

public class Foo<I, J, K, T extends Bar<I, J, K>> 

注意,如果这似乎是多余的,你可能会发现所有你需要的是

public class Foo<I, J, K> { 
    final Bar<I, J, K> bar; 
1

假设I,J,K不是类,它们是type-p参数名称,编译器需要引用它们的明确声明。

这会工作

class Foo<I,J,K,T extends Bar<I, J, K>> { 

} 

鉴于Bar预计3类型参数,可以

class Bar<I,J,K>{ 

}