首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中,Type变量的边界只能出现在Type变量声明中,对吗?

在Java中,Type变量的边界只能出现在Type变量声明中,对吗?
EN

Stack Overflow用户
提问于 2011-01-23 15:28:59
回答 3查看 2.2K关注 0票数 3

类型变量的边界只能出现在类、接口、方法和构造函数的声明中?

或者,当类型变量用作类型参数时,我可以绑定它们吗?

编辑:示例:

代码语言:javascript
运行
复制
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?
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-23 15:40:51

Java语言规范似乎同意你的观点:

类型变量(§4.4)是不限定的标识符。类型变量由泛型类声明(§8.1.2)、泛型接口声明(§9.1.2)、泛型方法声明(§8.4.4)和泛型构造函数声明(§8.8.4)引入。

票数 2
EN

Stack Overflow用户

发布于 2011-01-23 15:35:33

考虑一下这种静态方法:

代码语言:javascript
运行
复制
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“的”值“被每一次调用”绑定“。现在,在调用方法时它并不是真正的绑定;它是在编译时通过检查每次调用的静态细节而被“绑定”的,就像在其他地方显示的那样。

因此,如果在某个地方我这样称呼它:

代码语言:javascript
运行
复制
final List<Integer> numbers = Whatever.filter(origList, new Predicate<Integer>() {
  public boolean allow(Integer i) {
    return i != null && i.intValue() > 0;
  }
});

那么"T“就是”整数“。

票数 2
EN

Stack Overflow用户

发布于 2011-01-23 15:57:43

是。类型边界应用于Type变量的声明中。

换句话说,当Type变量第一次出现时。

代码语言:javascript
运行
复制
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
   } 

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4774585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档