【问题标题】:Is this java generic method?这是java泛型方法吗?
【发布时间】:2014-04-15 09:38:56
【问题描述】:
public Box<T>{

    private T t;

    public void setBox(T t){

         this.t = t;

    }

    public List<T> toList(){

         List<T> list = new ArrayList<>();
         list.add(t);

         return list;
    }
}

在这个简单的代码中,这个toList() 方法是否通用?

谢谢...

【问题讨论】:

标签: java list generics methods


【解决方案1】:

不,您的 toList 不是通用方法。

Java Language Specification,Java SE 8 版本,Section 8.4.4 说:

如果声明一个或多个类型变量,则该方法是泛型的。

所以一个泛型方法有它自己的类型参数,但是你的toList 只使用类的类型参数。因此它不是通用方法。

这也在 Lutz Horn 的评论中链接到的 tutorial 中进行了解释。 generic methods 上的部分说:

就像类型声明一样,方法声明可以是泛型的——也就是说,由一个或多个类型参数参数化。

如果一个方法有自己的类型参数,这就确认它是泛型的。

下面是一个泛型方法的例子:

public static <T> List<T> boxToList(Box<T> box) {
  return box.toList()
}

【讨论】:

  • 啊,谢谢,终于有人在回答之前阅读了问题
  • 在这个官方的 Oracle Java 教程:docs.oracle.com/javase/tutorial/java/generics/methods.html 上,出现错误: // Generic methods public void setKey(K key) { this.key = key; } 我对么? public void setValue(V value) { this.value = value; } public K getKey() { 返回密钥; } public V getValue() { 返回值; } }
  • @momi:好问题。我想这是一个错误,是的。
  • 这就是我困惑的根源。无论如何,非常感谢你。干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多