这是java通用方法吗?

时间:2014-04-15 09:38:57

标签: java list generics methods

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()方法是通用的还是不通用的?

谢谢...

1 个答案:

答案 0 :(得分:6)

不,您的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()
}