class GrannySmith extends Apple{}
class Gala extends Apple{}
class Fuji extends Apple{}
class Braeburn extends Apple{}
public class GenericsAndUpcasting{
public static void main(String[] args){
ArrayList<Apple> apples = new ArrayList<Apple>();
apples.add(new GrannySmith () );
apples.add(new Gala );
apples.add(new Fuji );
apples.add(new Braeburn );
for (Apple c: apples){
System.out.println(c);
}
}
}
分享到:
相关推荐
前者表示类型参数可以是T或T的任何子类型,后者则表示类型参数可以是T或T的任何超类型。这些通配符允许我们编写更灵活的代码,适应不同的操作需求。 3. **泛型的协变与逆变**:在Java中,泛型默认是不变的,即`List...
- 泛型类的子类可以有自己的类型参数,但必须是父类类型参数的子类型,如`class MyArrayList<T> extends ArrayList<T>`。 - 泛型方法可以实现多态,因为每个调用者都可以有自己的类型参数。 7. 野指针和强制类型...
- 但是,泛型不支持协变(Covariance)和逆变(Contravariance),所以 `List<Dog>` 不是 `List<Animal>` 的子类型。 8. 类型推断(Type Inference): - 自Java 7起,编译器可以自动推断泛型的类型,例如在创建...
在这个例子中,`E`必须是`T`的子类型。这样,`E`类型的对象可以赋值给`T`类型的变量,但反之则不行。 4. **边界类型(Bounded Types)**:可以为类型参数设定多个边界,例如`<T extends Number & Comparable<T>>`...
extends Number`表示任意Number的子类型,这样就可以接受Integer、Double等Number的子类。 ```java public void addToList(List<? extends Number> list, Number num) { list.add(num); } ``` **边界**:泛型...
比如,List是List的子类型(协变),而List不是List的子类型(逆变)。 在实际开发中,理解和熟练运用Java集合框架和泛型能够大大提高代码的可维护性和安全性,减少类型转换的麻烦,并使得代码更易于理解和复用。...
extends SomeType` 表示类型参数必须是 `SomeType` 或其子类型,如 `List<? extends Number>` 可以接收 `List<Integer>` 或 `List<Double>`。 - 下界通配符:使用 `? super SomeType` 表示类型参数必须是 `...
总之,Java泛型通过类型检查和类型安全提供了更强大、更安全的代码。类型擦除确保了运行时性能不会因泛型而受到影响,而通配符则提供了处理不确定类型的能力。理解并有效利用这些概念对于编写高效、健壮的Java代码至...
这在读取集合元素时非常有用,因为我们可以确保取出的元素是T类型或者其子类型。 ```java public void printList(List<? extends Number> list) { for (Number num : list) { System.out.println(num); } } ...
- 所有的Java类型都是 `Object` 类型的子类型。 但是,`List<Apple>` 和 `List<Fruit>` 之间的关系并不像非泛型类型那样简单。根据类型安全性原则,`List<Apple>` 不能自动赋值给 `List<Fruit>`,因为这可能导致...
例如,`List<? extends Number>`表示该列表可以接受任何`Number`子类型的元素。 - **非原始类型的泛型**:不能使用原始类型如`int`作为泛型参数,而应使用其包装类型`Integer`。 #### 总结 泛型是Java语言中的一个...
extends T`表示该通配符可以代表T或T的任何子类型;而`? super T`则表示该通配符可以代表T或T的任何父类型。 #### 示例 假设有一个泛型方法`printFirstElement`,它可以接受任何类型的列表并打印出第一个元素。...
Java泛型是JDK 1.5引入的重要特性,它为Java编程提供了类型安全的集合框架,使得在编译时期就能进行类型检查,避免了运行时的类型转换风险,极大地提高了代码的可读性和健壮性。泛型的引入是为了在不牺牲面向对象...
常见的通配符使用场景包括使用List表示可以持有T类型或T的任意子类型。 泛型的使用不仅限于类和接口,还可以用于方法参数和返回类型。这允许在创建泛型方法时,不依赖于类的泛型类型,从而提供更灵活的方法实现。 ...
### Java泛型编程快速入门详解 #### 一、Java泛型概述 Java泛型是Java 5.0引入的一个重要特性,它允许开发者在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 ##### 1.1 Java...
根据提供的文件信息,我们可以确定本书的标题为《Java泛型和集合》(Java Generics and Collections),作者为Maurice Naftalin和Philip Wadler。该书详细介绍了Java中的泛型(Generics)特性以及集合(Collections...