类型变量的边界只能出现在类、接口、方法和构造函数的声明中?
或者,当类型变量用作类型参数时,我可以绑定它们吗?
编辑:示例:
class MyClass<T extends Number> { // T is bounded by the interface Number
// can a bounded Type Parameter appear anywhere else,
// besides the Type parameter declaration?
}发布于 2011-01-23 15:40:51
Java语言规范似乎同意你的观点:
类型变量(§4.4)是不限定的标识符。类型变量由泛型类声明(§8.1.2)、泛型接口声明(§9.1.2)、泛型方法声明(§8.4.4)和泛型构造函数声明(§8.8.4)引入。
发布于 2011-01-23 15:35:33
考虑一下这种静态方法:
public static <T> List<T> filter(final List<T> orig, final Predicate<T> pred) {
return new ArrayList<T>() {{
for (T t : orig) if (pred.allow(t)) add(t);
}};
}"T“的”值“被每一次调用”绑定“。现在,在调用方法时它并不是真正的绑定;它是在编译时通过检查每次调用的静态细节而被“绑定”的,就像在其他地方显示的那样。
因此,如果在某个地方我这样称呼它:
final List<Integer> numbers = Whatever.filter(origList, new Predicate<Integer>() {
public boolean allow(Integer i) {
return i != null && i.intValue() > 0;
}
});那么"T“就是”整数“。
发布于 2011-01-23 15:57:43
是。类型边界应用于Type变量的声明中。
换句话说,当Type变量第一次出现时。
public class MyClass<T extends MyItem> { // <- Type declaration
private T item; // <- Type usage
public <K extends T> K getSubitem() {
// ^ ^
// declaration usage
...
Arrays.<K>asList(); // <- Type Usage not a type declaration
}
}https://stackoverflow.com/questions/4774585
复制相似问题