这是Java的泛型方法吗?

3
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()方法是泛型吗?

谢谢...


3
是的,这是一种通用方法。 - astack
1
请访问 http://docs.oracle.com/javase/tutorial/extra/generics/index.html 了解更多信息。 - user1907906
2
你知道这个术语。查一下吧 - user2864740
1个回答

6

不,你的toList方法不是一个泛型方法。

Java Language Specification,Java SE 8版,第8.4.4节中说:

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

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

这也在Lutz Horn的评论中链接到的教程中得到解释。关于泛型方法的部分说:

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

这证实了一个方法如果拥有自己的类型参数,则是通用的。
以下是一个通用方法的示例:
public static <T> List<T> boxToList(Box<T> box) {
  return box.toList()
}

1
啊,谢谢,终于有人在回答之前阅读了问题。 - Maurice Perry
在这个官方的Oracle Java教程中:http://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() { return key; } public V getValue() { return value; } } 请问我的理解正确吗? - momi
@momi:好问题。我猜这是一个错误,是的。 - Toxaris
那就是我困惑的根源。无论如何,非常感谢你。干杯 - momi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接