Java 泛型比遗留代码提供了哪些好处:

Java 泛型比遗留代码提供了哪些好处:,java,generics,Java,Generics,我在docs.oracle网站上读到,以下不带泛型的代码段需要强制转换: 但是,如果我使用泛型编写代码,那么仍然容易出错: List<Object>= new List<Object>; list.add("hello"); String s=(String)list.get(0); 那么泛型的真正用途是什么…:thnx previous List<Object>= new List<Object>; list.add("hello"); Str

我在docs.oracle网站上读到,以下不带泛型的代码段需要强制转换:

但是,如果我使用泛型编写代码,那么仍然容易出错:

List<Object>= new List<Object>;
list.add("hello");
String s=(String)list.get(0);
那么泛型的真正用途是什么…:thnx previous

List<Object>= new List<Object>;
list.add("hello");
String s=(String)list.get(0);
应该是

List<String>= new ArrayList<String>();    // this is now a list of String, not a list of object
     ^^^^^^                 ^^^^^^
list.add("hello");
String s=list.get(0);    // no casting needed
         ^
可以按所需的类型进行参数化。您的示例有两种方法可以做同样的事情,因为您使用最基本的类进行参数化

泛型的优点是您可以编写更特定于一个类的类,这里是String。这为您提供了更好的类型安全性,以便在编译过程中尽早捕获bug。这可以防止铸造方法产生的问题

应该是

List<String>= new ArrayList<String>();    // this is now a list of String, not a list of object
     ^^^^^^                 ^^^^^^
list.add("hello");
String s=list.get(0);    // no casting needed
         ^
可以按所需的类型进行参数化。您的示例有两种方法可以做同样的事情,因为您使用最基本的类进行参数化


泛型的优点是您可以编写更特定于一个类的类,这里是String。这为您提供了更好的类型安全性,以便在编译过程中尽早捕获bug。这可以防止由强制转换方法引起的问题。

使用泛型可以使代码类型安全。您可以防止ClassCastException。

使用泛型使代码类型安全。您可以防止ClassCastException。

假设您要存储名称字符串列表

List listNames = new ArrayList();
listNames.add("Durgesh");//ok
但我也可以给它加一个整数

listNames.add(5000);//storing int instead of string
现在做这个

String name2=listNames.get(1);//throws exception{int->string}
如果没有泛型,您可以向集合中添加无效类型,这可能会破坏您的代码

使用泛型可以解决这个问题

List<String> listNames = new ArrayList();
listNames.add("Durgesh");
listNames.add(3000);//would through error at compile time
因此,泛型提供了类型安全性

通过列表,您可以添加任何类型的对象。由于对象参数,它允许您添加任何类型的objectstring,int

如果x可以转换为y或y可以转换为x,则列表不能被分配=列表,反之亦然。它们都应该是x或y,从而提供类型安全性


因此,您将无法将=List分配给List,反之亦然。

假设您要存储名称字符串的列表

List listNames = new ArrayList();
listNames.add("Durgesh");//ok
但我也可以给它加一个整数

listNames.add(5000);//storing int instead of string
现在做这个

String name2=listNames.get(1);//throws exception{int->string}
如果没有泛型,您可以向集合中添加无效类型,这可能会破坏您的代码

使用泛型可以解决这个问题

List<String> listNames = new ArrayList();
listNames.add("Durgesh");
listNames.add(3000);//would through error at compile time
因此,泛型提供了类型安全性

通过列表,您可以添加任何类型的对象。由于对象参数,它允许您添加任何类型的objectstring,int

如果x可以转换为y或y可以转换为x,则列表不能被分配=列表,反之亦然。它们都应该是x或y,从而提供类型安全性


因此,您将无法将=List分配给List,反之亦然。

泛型用于在编译时检测运行时异常

假设您创建了一个列表来存储字符串,并将其传递给一个方法。。增强列表。。在执行之后,您将遍历列表并获取所有字符串

在genercis之前,enhanceListList方法可能会将其他类型的对象添加到列表中,从而创建可能的ClassCastException

使用泛型,可以很好地绑定列表包含的对象类型

void someMethod() {
   List<String> listOfStrings = new List<String>();
   enhanceList(listOfStrings);

   for(String s : listOfStrings) {
       //no error here
   }
}

void enhanceList(List<String> l) {
    l.add(new Integer(1)); //compile-time error
}

然而,应该谨慎使用泛型,列表对绑定类型没有多大帮助,因为它可以保存任何对象,因为对象是所有java类的超类。我建议始终创建特定类型的列表。

泛型用于在编译时检测运行时异常

假设您创建了一个列表来存储字符串,并将其传递给一个方法。。增强列表。。在执行之后,您将遍历列表并获取所有字符串

在genercis之前,enhanceListList方法可能会将其他类型的对象添加到列表中,从而创建可能的ClassCastException

使用泛型,可以很好地绑定列表包含的对象类型

void someMethod() {
   List<String> listOfStrings = new List<String>();
   enhanceList(listOfStrings);

   for(String s : listOfStrings) {
       //no error here
   }
}

void enhanceList(List<String> l) {
    l.add(new Integer(1)); //compile-time error
}

然而,应该谨慎使用泛型,列表对绑定类型没有多大帮助,因为它可以保存任何对象,因为对象是所有java类的超类。我建议始终创建特定类型的列表。

List会阻止您添加非字符串项。塔达!列表将阻止您添加非字符串项。塔达!您在新列表中有输入错误;好的,我明白了…这意味着我可以向容器对象添加特定的数据类型。编译器会在编译时检查它……如果您在新列表中有输入错误;好的,我明白了…这意味着我可以向容器对象添加特定的数据类型。编译器在编译时检查它…很好