擦除失去了在泛型代码中执行某些操作的能力,任何在运行时需要知道确切类型信息的操作都将无法工作,看下面的例子:
public class Eras<T>{
public static void main(String[] args){
if(ages instanceof T){}//出错
T var = new T(); //出错
T[] array =new T[100];//出错
}
}
在例子中使用instanceof失败,因为它的类型已经被擦除了。
不能创建泛型数组,
如果想创建泛型数组,使用ArrayList,
public class ListOfGenerics<T>{
private List<T> array = new ArrayList<T>();
public void add(T item){
array.add(item);
}
public T get(int idnex){
retrun array.get(index);
}
}
即使创建了数组
Dog<Integer>[] dog;
在编译器是没有问题的,但是在运行期仍然是个Object类型。
解决办法:
不能创建T[] array = new T[sz];,可创建一个对象数组,将其转型
public class A{
private T[] array;
public A(int size){
array = (T[])new Object[size];
}
}
class Fruit {}
class Apple extends Fruit {}
class Jonathan extends Apple {}
class Orange extends Fruit {}
public class CovariantArrays {
public static void main(String[] args) {
Fruit[] fruit = new Apple[10];
fruit[0] = new Apple(); // OK
fruit[1] = new Jonathan(); // OK
// Runtime type is Apple[], not Fruit[] or Orange[]:
try {
// Compiler allows you to add Fruit:
fruit[0] = new Fruit(); // ArrayStoreException
} catch(Exception e) { System.out.println(e); }
try {
// Compiler allows you to add Oranges:
fruit[0] = new Orange(); // ArrayStoreException
} catch(Exception e) { System.out.println(e); }
}
} /* Output:
java.lang.ArrayStoreException: Fruit
java.lang.ArrayStoreException: Orange
编译器允许放入Fruit对象,但这在运行时处理的却是Apple[]类型,错误就发生了,ArrayStoreException
分享到:
相关推荐
Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力...
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
补充知识:泛型1---马克-to-win java视频的详细描述与介绍
标题与描述均提到了“全面总结Java泛型--实例”,这表明文章旨在深入解析Java泛型的概念,并通过具体示例来展示其应用。Java泛型是Java编程语言的一个强大特性,它允许在编译时检查类型安全,并且所有的强制转换都是...
【Java基础】泛型方法 - 右撇子 - 博客频道 - CSDN.NET
总之,DGL是Delphi开发者的一个强大工具,它通过泛型技术提高了代码的可复用性和安全性,同时提供了丰富的数据结构和算法,使得开发者能够更专注于问题的解决,而非基础数据操作的实现。无论是在大型项目还是小型...
它的引入主要是为了解决在集合操作中类型安全性的问题,并通过引入参数化类型的概念,提高了代码的复用性与可读性。 ### 泛型概念 泛型,即参数化类型(Parameterized Types),是允许在定义类、接口和方法时使用...
补充知识2 ---马克-to-win java视频泛型的详细描述与介绍
day02【Collection、泛型】-笔记.md
《数学与泛型编程-高效编程的奥秘》个人阅读笔记
- **案例2:利用`map`实现简单的词频统计** - 创建一个`map, int>`类型的容器。 - 遍历文本,对于每个单词,使用`map`的`[]`操作符更新其出现次数。 - 输出统计结果。 #### 六、总结与展望 通过上述内容的学习...
数学和泛型编程-高效编程的奥秘(英文版pdf)原名:From_Mathematics_to_Generic_Programming,作者;Alexander A. Stepanov Daniel E. Rose
2. 类作为参数类型: 在某些高级场景下,我们可能需要将类本身作为泛型的参数类型。这样做可以创建出能处理不同类实例的通用组件。例如,我们可能会创建一个`Factory`类,它接受一个构造函数(即类)作为参数,然后...
本demo是自己写的一个命令模式的demo,设计到了一般的命令模式,命令模式的变种,万能命令,block封装命令,复合型命令等等,对整个demo我写了一篇文章:https://www.jianshu.com/p/266794b9eda6 ,有兴趣的可以对照着文章...
泛型使我们的代码更具通用性,能够处理不同类型的数据,而图遍历算法则帮助我们解决实际问题,如成语接龙游戏的解决方案。理解并掌握这些技术对于任何想要在IT领域深入发展的人员来说都是至关重要的。
使用泛型算法的好处在于,它们提供了标准化的解决方案,减少了代码的重复,并且能够在编译时自动进行类型检查,确保安全性和效率。同时,通过使用标准库提供的算法,开发者可以专注于解决问题,而不是实现基础的算法...
.Net 泛型约束-附件资源
Decal 的全称是 Delphi Container and Algorithm Library,也就是 Delphi 数据容器和算法类库。 我个人认为是目前我所发现的类结构建模建得很好的一个数据结构类库,性能也是相当突出。他的思想是来自Stepanov 和 ...
java-泛型-面试题.docx