使类通用的重点是什么?

use*_*042 5 java generics class

当你有一个方法时,我明白将它声明为通用是有意义的,这样我就可以使用泛型参数.像这样:

public <T> void function(T element) {
    // Some code...
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我可以简单地声明每个方法都是通用的,那么使整个类成为通用的究竟是什么呢?

Per*_*ror 6

好吧,不同的是,如果你试图让你的类中的每个方法都是通用的,那么你在firstGenericMethod中使用的泛型类型可能是也可能不是同一类型.我的意思是.

public <T> void firstGenMethod(...){

}

public <T> void secondGenMethod(...){

}
Run Code Online (Sandbox Code Playgroud)

测试:

  SomeClass ref = new SomeClass();
  ref.firstGenMethod("string");
  ref.secondGenMethod(123);//legal as this generic type is not related to the generic type which is used by firstGenMethod
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,没有任何一个方法具有相同的泛型类型.这取决于你如何调用它们.如果您使该类具有通用性,则该类型将应用于该类中的所有方法.

class Test<T>{

    public void firstGenMethod(T t){

    }

    public  void secondGenMethod(T t){

    }
}
Run Code Online (Sandbox Code Playgroud)

测试:

 Test<String> testingString = new Test<>();
   testingString.firstGenMethod("abc");
   testingString.firstGenMethod(123);// invalid as your Test class only expects String in this case
Run Code Online (Sandbox Code Playgroud)

您通常会将您的类设为通用的,您希望该类的整个行为(方法)在同一类型上进行处理.最好的例子是Java Collection Framework中的类