Java 使类成为泛型的目的是什么?

Java 使类成为泛型的目的是什么?,java,class,generics,Java,Class,Generics,当您有一个方法时,我理解将其声明为泛型是有意义的,这样我就可以接受泛型参数。像这样: public <T> void function(T element) { // Some code... } 公共无效函数(T元素){ //一些代码。。。 } 但是,如果我可以简单地将每个方法声明为泛型,那么使整个类成为泛型的背后到底是什么想法呢?主要思想是将类/方法绑定为一个类型。最好的例子是编程语言中的泛型的概念。这是多态性的真正应用 泛型类封装了不特定于特定数据类型的操作。泛型类

当您有一个方法时,我理解将其声明为泛型是有意义的,这样我就可以接受泛型参数。像这样:

public <T> void function(T element) {
    // Some code...
}
公共无效函数(T元素){
//一些代码。。。
}

但是,如果我可以简单地将每个方法声明为泛型,那么使整个类成为泛型的背后到底是什么想法呢?

主要思想是将类/方法绑定为一个类型。最好的例子是编程语言中的
泛型的概念。这是多态性的真正应用
泛型类封装了不特定于特定数据类型的操作。泛型类最常用于链表、哈希表、堆栈、队列、树等集合,在这些集合中,无论存储的数据类型如何,从集合中添加和删除项等操作的执行方式基本相同

对于大多数需要集合类的场景,建议使用编程语言中提供的集合类。
引用自
泛型类型是在类型上参数化的泛型类或接口

public class Box {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

一般来说,您可以将其限制为

public class Box<T> {
    // T stands for "Type"
    private T t;

    public void set(T t) { this.t = t; }
    public T get() { return t; }
}
公共类框{
//T代表“类型”
私人T;
公共无效集(T){this.T=T;}
公共T get(){return T;}
}


我还建议您看看这个

看看集合类。以
List
为例。如果该类未声明为泛型,您如何确保仅将正确类的元素插入列表?当调用
ArrayList.get(i)
时,您如何知道得到了什么?

好吧,区别在于,如果您试图使类中的每个方法都是泛型的,那么您在say firstGenericMethod中使用的泛型可能是相同的类型,也可能不是相同的类型。我的意思是

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

}

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

}
在上面的例子中,没有一个gaurentee认为这两个方法具有相同的泛型类型。这取决于您如何调用它们。但是,如果将该类设置为泛型,则该类型将应用于该类中的所有方法

class Test<T>{

    public void firstGenMethod(T t){

    }

    public  void secondGenMethod(T t){

    }
}
类测试{
公共空间法(T){
}
第二种方法(T){
}
}
测试:

  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
 Test<String> testingString = new Test<>();
   testingString.firstGenMethod("abc");
   testingString.firstGenMethod(123);// invalid as your Test class only expects String in this case
testtestingstring=newtest();
testingString.firstGenMethod(“abc”);
testingString.firstGenMethod(123);//无效,因为在这种情况下测试类只需要字符串

如果希望类的整个行为(方法)在同一类型上处理,通常会使类成为泛型的。最好的例子是Java集合框架中的类,确切地说,是为了强制该类中的所有方法应用于某个类型

这通常用于“容器”类中。如果您正在构建一个列表,并且将其设置为通用的,那么您需要确保添加元素、获取元素、迭代等。。。始终使用相同的类型

正如您所提到的,这还允许您使用特定类型的实例变量,并且有几个方法以一致的方式使用此实例(可能返回它,影响它…)


如果您有一个具有多种不同类型的“泛型”类,这可能表明您正在一次编写两个泛型类。。。(尽管这可能是合法的。)

那么您可以在泛型类型的类中包含变量?方法是成员,它可以是泛型的,而不必使整个类成为泛型的。我唯一能想到的另一件事是能够使实例变量具有泛型性,我认为这不应该在没有解释的情况下被否决。虽然我们大多数使用Java一段时间的人可能认为这是显而易见的,但也有一些人刚刚开始学习,我认为这是一个有效的问题。实际上,上面的函数可以等价地写成
public void function(Object element)
。泛型没有用处