例子:
public class A {
void get(Class<B> clazz) {
}
void call() {
get(B.class);
get(C.class); // error:C类不是B类, C只是B的子类
}
void getM(Class<? extends B> clazz) {
}
void callM() {
getM(B.class);
getM(C.class);
}
void list() {
List<B> rs = new ArrayList<B>();
rs.add(new B());
rs.add(new C()); //correct,因为C的实例可以认为是B类型的
rs.get(1); //return type is B
List<C> ss = new ArrayList<C>();
ss.add(new B()); //error: B的实例不可以认为是是C类型的
ss.add(new C());
rs = ss; //error: C类型的List不能转为B类型的List
List<? extends B> ms = new ArrayList<B>();
ms.add(new B()); //error: 因为有?号,代表未知类型,而不是B,也不是C
ms.add(new C()); //error: 同上
ms = ss;
rs = ms; //error: 未知类的List不能转为B类型的List
ms.get(0); //return type is B
}
<T> T[] makeArray(T t) {
T aa = new T();
return new T[100]; // error:因为类型变量在运行时不存在,也就没有办法在运行时检查数组的实际类型了
}
class B {}
class C extends B {}
}
看上在例子,总结出以下几点:
1在泛型的应用当中,也要注意类和对象的区别,比如上面C类是B类的子类,但是,C类并不是B类。而C的实例对象可以认为是B类型的;
2带有通配符?的集合不能加入元素;
3子类的集合不能转为父类型的集合;
4不存在运行的泛型类型变量,只有在编译时有。
分享到:
相关推荐
C# 泛型和数组在 C# 2.0 中,下限为零的一维数组自动实现 IList。这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法。此技术主要对读取集合中的数据很有用。IList<T> 接口不能用于在数组中添加或...
4. 小结 在本文中,我们讨论了Java中的泛型构造函数,包括非泛型类中的泛型构造函数和泛型类中的泛型构造函数。我们也学习了如何使用泛型构造函数来创建对象。在实际开发中,泛型构造函数可以帮助我们编写更加灵活...
#### 小结 C#泛型的引入标志着编程范式的重大进步,它不仅提高了代码的复用性和执行效率,还增强了类型安全性,减少了运行时错误的可能性。通过合理运用泛型,开发者可以构建更加灵活、高效且健壯的软件系统。无论...
本资源摘要信息涵盖了C#编程语言的基础知识点,包括泛型队列的设计、迭代器方法的应用、枚举器类的实现等。 一、泛型队列的设计 在C#中,泛型队列是指可以存储不同类型元素的队列。通过设计泛型队列,可以实现队列...
小结 在Java泛型编程中,extends和super关键字用于限制类型参数的范围。PECS原则是一个重要的原则,用于指导泛型编程。了解extends和super关键字的区别,并遵循PECS原则,可以帮助你编写更好的泛型代码。
**10.1.5 枚举小结** - 枚举是一种引用类型,因为它隐式继承自`java.lang.Enum`类。 - 枚举是JDK 5.0之后新增的特性,使用并不频繁。 - 枚举值是常量,具有默认的`public static final`修饰符。 - 使用枚举类型的...
#### 小结 本文介绍了 Rust 编程语言中的三个关键概念:泛型、特型和生命周期。通过泛型,我们可以编写更加通用和可重用的代码;通过特型,我们可以定义一系列类型共享的行为;通过生命周期,我们可以确保引用的...
### 小结 C#2.0通过引入泛型、迭代器和匿名方法等新特性,极大地增强了语言的功能性和灵活性。泛型提供了类型安全性和代码重用性;迭代器简化了集合的遍历过程,使得代码更加简洁高效;匿名方法则让事件处理和其他...
本文档“JAVA程序:接口小结”很可能是对Java接口的全面总结,包含了相关的代码示例,帮助学习者深入理解和运用接口。 接口在Java中的主要特性包括: 1. **接口是完全抽象的**:接口中的所有方法默认都是抽象的,...
STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它由容器、算法和迭代...在实际开发中,了解如何正确选择和使用这些组件,以及如何结合泛型编程,可以使你的C++编程技能更上一层楼。
在“day09【常用API、引用类型小结】”的学习中,我们可能会涉及到以下关键知识点: 1. **常用API**:这部分可能涵盖各种常用库,例如Java的`java.util`包,其中包含集合框架(如ArrayList、HashMap)、日期时间...
【集合问题小结】 在Java编程中,集合是用来存储多个对象的容器,它们提供了比数组更灵活的操作方式。集合框架是Java中一个重要的部分,它包括多种数据结构,如List、Set和Map等。本篇将重点讨论泛型、匿名内部类...
如果需要在Objective-C中使用泛型类,通常需要创建一个不带泛型的子类,然后在这个子类上添加`@objc`。 在实际开发中,`@objc`还与Swift的编码(encoding)和反射(reflection)功能有关。由于Objective-C runtime...
泛型List中有一个比较列表是否已包含对象的方法Contains(),今天在网上搜了一个用法,记录下来,备查。 要用此方法比较我们的自定义对象,首先要有一个比较器, 要注意的是,这里的比较器是实现IEqualityComparer...