Java 泛型比遗留代码提供了哪些好处:
我在docs.oracle网站上读到,以下不带泛型的代码段需要强制转换: 但是,如果我使用泛型编写代码,那么仍然容易出错: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
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会阻止您添加非字符串项。塔达!列表将阻止您添加非字符串项。塔达!您在新列表中有输入错误;好的,我明白了…这意味着我可以向容器对象添加特定的数据类型。编译器会在编译时检查它……如果您在新列表中有输入错误;好的,我明白了…这意味着我可以向容器对象添加特定的数据类型。编译器在编译时检查它…很好