package com.jdk150.bean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
//限制使用泛型可用类型 当没有指定限制类型时默认为Object(继承或实现某个类或接口只能使用extends)
//限制泛型只能为继承或实现T后面那个接口的类或子类 才能给T赋值
public class ListGenericsFoo<T extends List> {
private T[] fooArray;
public T[] getFooArray() {
return fooArray;
}
public void setFooArray(T[] fooArray) {
this.fooArray = fooArray;
}
public static void main(String[] args){
ListGenericsFoo<LinkedList> linkl = new ListGenericsFoo<LinkedList>();
ListGenericsFoo<ArrayList> arrayl = new ListGenericsFoo<ArrayList>();
LinkedList[] link = new LinkedList[10];
linkl.setFooArray(link);
ArrayList[] array = new ArrayList[10];
arrayl.setFooArray(array);
//由于HashMap 并没有实现List接口 所以报错
// ListGenericsFoo<HashMap> hash = new ListGenericsFoo<HashMap>();
}
}
分享到:
相关推荐
- **类型擦除**:泛型信息在运行时不可用,无法在运行时获取泛型类型。 - **不能实例化类型参数**:如 `new T()` 是不允许的。 - **原始类型与泛型**:原始类型(如int、double)不能直接用作类型参数,但可以...
- **类型擦除限制**:由于类型擦除,泛型无法在运行时获取具体类型信息,因此不能用于反射或序列化。 6. **最佳实践** - 尽量避免使用无界通配符`?`,因为它限制了方法的可用性。 - 在可能的情况下,使用协变(`...
- **性能提升**:由于泛型的类型信息在运行时可用,编译器能够生成更优化的IL代码,避免了类型转换的开销,从而提升了执行效率。 - **代码复用**:泛型类和方法可以在多种数据类型上重复使用,减少了代码量,提高...
Java 泛型是Java SE 5.0 引入的一个重要特性,它的主要目的是...然而,它也有一些限制,如类型擦除导致的某些编程模式的不可用,以及泛型类型的子类型规则。理解这些概念对于编写高质量、易于维护的Java代码至关重要。
1. **限制泛型的可用类型**:通过有界类型,可以确保传入泛型方法或类的参数符合特定的继承关系,比如只接受`Comparable`类型的对象。 2. **通配符泛型**:使用`?`通配符可以表示任意类型,但有一些操作上的限制。...
- **泛型约束**:有时需要为泛型类型参数添加约束来限制可用类型,但这可能会使代码变得复杂。 - **反射问题**:使用反射访问泛型类型时,需要特别处理以获得正确的类型信息。 - **编译时确定性**:某些场景下,泛型...
`可以限制泛型类型的范围。例如,`? extends Number`表示该类型参数可以是`Number`的任何子类,这样我们就可以用这个类型的列表存储`Integer`、`Double`等。而`? super T`表示类型参数可以是`T`或`T`的超类,这在...
Class literals 是一种运行时类型标记,它们可以用来获取一个类的信息,这对于泛型类型尤其有用,因为在类型擦除后,编译时类型信息不再可用。 #### 9. More fun with * 在 Java 中,星号通配符(*)有多种用途,...
` 表示任意类型,但不能创建实例,只能作为引用类型使用。 面试题示例: 1. 为什么不能在泛型列表中添加null?(因为泛型类型在编译时擦除,添加null可能导致运行时错误) 2. 解释一下"PECS"原则,即Producer ...
例如,泛型类型信息在运行时不可用,这是因为泛型在JVM中的实现使用了类型擦除。类型擦除意味着泛型类型在运行时被转换为原始类型。泛型不支持基本数据类型,比如int、long等,因为这些类型在Java中不是对象类型,...
· 理解基元类型、值类型和引用类型的行为,从而最高效地定义和使用它们 · 使用泛型和接口来定义可重用的算法 · 高效使用特定的CLR类型——委托、枚举、定制attribute、数组和字符串 · 理解垃圾回收器是如何管理...
这种设计虽然简化了JVM的实现,但也限制了一些功能的可用性,比如无法直接操作原始类型。 - **C#泛型**:C#泛型不仅支持类型擦除,还允许值类型作为泛型参数。这意味着开发者可以直接使用如`int`这样的基本类型作为...
原始代码中第14行使用了显式的类型转换,这在使用泛型后不再需要。因此移除这一行是正确的。 - **C. 修改第13行为“for (int i : intList) {”** 这里使用了增强for循环(foreach),它可以直接遍历泛型化的列表...
有时,可能希望限制泛型类型参数只能是通过特定构造函数创建的对象。例如: ```delphi type TData = record Value: integer; constructor Create(const Val: integer); end; constructor TData.Create(const ...
3. **泛型约束**:为了限制泛型类型参数的行为,可以使用泛型约束。这可以确保泛型类型具有特定的方法、属性或基类,以满足插件的特定需求。 **C03记事本插件** 1. **记事本插件示例**:这个示例可能是一个扩展了...
在Java中,泛型可以设置边界来限制可接受的类型。题目中类定义的目的是保存最小值和最大值,需要能调用doubleValue方法。Number类及其所有子类都有doubleValue方法,而Integer是Number的一个子类。因此,选项D和F是...
泛型不能使用简单类型 GenList<int> nList = new GenList(); //编译错误 泛型类不能是异常类,也就是该泛型类不能继承自Throwable以及其子类 public class MyExpection<T> extends Exception{ } //...