java泛型

简介: java泛型

一、泛型的介绍及优点

泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了

(1)保证了类型的安全性;(2) 消除强制转换;(3)避免了不必要的装箱、拆箱操作,提高程序的性能;(4)提高了代码的重用性。

二、如何使用泛型

1、泛型类

/**
 * 泛型类
 *
 * @param <T>
 */
public class Generic<T> {
    private T key;
 
    public Generic(T key) {
        this.key = key;
    }
 
    public T getKey() {
        return key;
    }
 
    public void setKey(T key) {
        this.key = key;
    }   
 
    @Override
    public String toString() {
        return "Generic{" +
                "key=" + key +
                '}';
    }
}
//泛型子类明确父类
public class GenericChild1 extends Generic<String>{
    public GenericChild1(String key) {
        super(key);
    }
}
//泛型子类,和父类泛型保持一致
public class GenericChild2<T> extends Generic<T> {
    public GenericChild2(T key) {
        super(key);
    }
}

2、泛型接口

public interface IGeneric<T> {
    void printObject(T t);
}
public class IGenericImpl<T> implements IGeneric<T> {
 
    @Override
    public void printObject(T t) {
        System.out.println(t);
    }
 
}
 
public class IGenericImpl2 implements IGeneric<String> {
 
    @Override
    public void printObject(String t) {
        System.out.println(t);
    }
 
}

3、泛型方法

    public <E> E getValue2(E e) {
        return e;
    }
 
    public <E> void print3(E... e) {
        for (E item : e) {
            System.out.println(item);
        }
    }
 
    public <E> void printAll(E e) {
        System.out.println(e);
    }

4、泛型通配符

public class Animal {
}
public class Cat extends  Animal{
}
public class MiniCat extends Cat{
}

三、测试

  public static void main(String[] args) {
        Generic<String> generic=new Generic<>("zhansan");
        System.out.println(generic.toString());
 
        IGeneric<Integer> iGeneric=new IGenericImpl<>();
        iGeneric.printObject(10);
        Integer uer = Generic.getValue(1);
        System.out.println(uer);
        String str = generic.getValue2("abc");
        System.out.println(str);
    }
 public static void main(String[] args) {
        List<Animal> animals=new ArrayList<>();
        List<Cat> cats=new ArrayList<>();
        List<MiniCat> miniCats=new ArrayList<>();
        showCat(cats);
        showCat(miniCats);
        showCat2(cats);
        showCat2(animals);
    }
    public static  void showCat(List<? extends Cat> list){
        for (Cat cat : list) {
            System.out.println(cat);
        }
    }
    public static  void showCat2(List<? super Cat> list){
        for (Object o : list) {
            System.out.println(o);
        }
    }
目录
相关文章
|
7天前
|
Java 编译器 容器
Java 泛型
Java 泛型
20 10
|
10天前
|
安全 Java 编译器
Android面试题之Java 泛型和Kotlin泛型
**Java泛型是JDK5引入的特性,用于编译时类型检查和安全。泛型擦除会在运行时移除类型参数,用Object或边界类型替换。这导致几个限制:不能直接创建泛型实例,不能使用instanceof,泛型数组与协变冲突,以及在静态上下文中的限制。通配符如<?>用于增强灵活性,<? extends T>只读,<? super T>只写。面试题涉及泛型原理和擦除机制。
18 3
Android面试题之Java 泛型和Kotlin泛型
|
3天前
|
存储 安全 Java
Java泛型(1)
Java泛型(1)
23 13
|
7天前
|
安全 Java 编译器
在Java中,什么是类型擦除机制,如何有效运用泛型的类型擦除机制?
Java的类型擦除机制在编译时移除了泛型的类型参数信息,生成的字节码不包含泛型,以确保向后兼容。这导致运行时无法直接获取泛型类型,但编译器仍做类型检查。为了有效利用类型擦除,应避免运行时类型检查,使用通配符和界限增加代码灵活性,通过超类型令牌获取泛型信息,以及利用泛型方法来保证安全性。理解这些策略能帮助开发者编写更安全的泛型代码。
29 8
|
9天前
|
安全 Java 开发者
Java泛型详解
Java泛型详解
16 2
|
14天前
|
安全 Java
深入理解 Java 泛型工厂方法:类型安全与灵活性的结合
深入理解 Java 泛型工厂方法:类型安全与灵活性的结合
10 1
|
14天前
|
安全 Java 编译器
Java 泛型详解:全面掌握类型安全与灵活性的利器
Java 泛型详解:全面掌握类型安全与灵活性的利器
13 1
|
14天前
|
安全 Java 开发者
详解 Java 泛型:核心概念与实用示例
详解 Java 泛型:核心概念与实用示例
12 1
|
19小时前
|
存储 安全 Java
JAVA泛型:类型安全,从编译时开始!
【6月更文挑战第28天】Java泛型是JDK 5引入的特性,用于在编译时实现类型安全的集合。它通过类型参数增强代码灵活性和重用性,减少错误。示例展示了泛型列表`List&lt;Integer&gt;`和`List&lt;String&gt;`如何确保元素类型正确,防止编译时类型不符。泛型提升了代码的类型安全、可读性和维护性。
|
19小时前
|
安全 Java 编译器
JAVA泛型,编译时类型安全的“秘密武器”
【6月更文挑战第28天】Java泛型是JDK 5引入的特性,用于在编译时增强类型安全和代码复用。它允许类、接口和方法使用类型参数,确保运行时类型匹配,减少了类型转换错误。例如,泛型方法`&lt;T&gt; void printArray(T[] array)`能接受任何类型数组,编译器会检查类型一致性。此外,泛型提升了代码的可读性、可维护性和与容器类的配合效率,优化整体软件质量。