public class GenericityTest {
java.util.ArrayList arr;
/*泛型 JDK 5引入
* 适用于多种类型执行同一代码
* 在使用前就可以确定参数类型,不需要转换,通常运用最广泛的是集合中
* 指定泛型参数,就可以统一集合元素类型,使得存取更加便捷*/
/*自定义泛型
* 泛型参数名称可以任意
* 通常使用的有:T Type,E Element,K Key,V Value,*/
class ArrayList<E> {
/*当指定了泛型参数时,此属性类型也随之确定下来
* 要注意,泛型类型作为属性出现时不能被final修饰*/
private E element;
private int size;
private Object[] elements;
public ArrayList(){
elements = new Object[10];
}
public ArrayList(int length){
elements = new Object[length];
}
/*可以在方法中应用泛型参数*/
public void add(E e){
if(size>=elements.length){
/*扩容*/
}
elements[size++] = e;
}
}
/*泛型的约束*/
/*自定义泛型方法
* 此时要求此泛型参数必须实现Serializable接口
* 该泛型仅对当前方法产生作用*/
public <T extends Serializable> String getType(T t){
return t.getClass().getName();
}
/*泛型的继承*/
class SuperClass<K,V> {}
/*全部继承*/
class Extend<K,V> extends SuperClass<K,V>{}
/*选择继承部分或可以不继承*/
class Extend1<V> extends SuperClass<String,V>{}
/*不确定泛型*/
/*使用 ? 来表示一个未知类型,可以使用约束限制其范围
* 比如以下示例,将传入的运行时类所对应的基础类类型限制为SuperClass
* 或者是其一个子类*/
public SuperClass getSuperClass(Class<? extends SuperClass> t) {
SuperClass superClass = null;
try {
superClass = t.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return superClass;
}
/*示例,要求传递的参数需为SuperClass或其子类的运行时类
* 返回该运行时类对应基础类的实例*/
public <T extends SuperClass> T get(Class<T> tClass) throws IllegalAccessException, InstantiationException {
return tClass.newInstance();
}
/*示例,要求传递一个任意泛型类型的运行时类,返回该运行时类的基础类实例*/
public <T> T getT(Class<T> tClass) throws IllegalAccessException, InstantiationException {
return tClass.newInstance();
/*Spring中getBean(Class<T> aClass)方法就是靠这种方式来
完成获取容器中的组件而又无需强转类型的效果。即返回值类型是可变的,取决于传递的参数*/
}
}
Java中泛型的应用示例
最新推荐文章于 2022-03-11 16:54:19 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)