美文网首页
java 泛型类

java 泛型类

作者: arkliu | 来源:发表于2022-11-01 08:19 被阅读0次

泛型的概念

java泛型,是jdk1.5引入的一个新特性,泛型提供了编译时类型检测机制,该机制允许我们在编译时检测到非法的类型数据结构。

  • 编译器检查
  • 减少了数据类型转换

泛型类

泛型类声明语法

class 类名 <泛型标识,泛型标识.....> {
  private 泛型标识 变量名;
}
public class Generic<T> {
    private T key;

    public T getKey() {
        return key;
    }
    public void setKey(T key) {
        this.key = key;
    }
    public Generic(T key) {
        super();
        this.key = key;
    }
    @Override
    public String toString() {
        return "Generic [key=" + key + "]";
    }
}

泛型类使用语法

类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();

jdk1.7之后:
类名<具体的数据类型> 对象名 = new 类名<>();
public class MainClass {

    public static void main(String[] args) {
        Generic<String>strGen = new Generic<>("hello world");
        Generic<Integer>intGen = new Generic<>(100);
        
        // 泛型类不支持基本数据类型
//      Generic<int>intbaseGen = new Generic<>(100); error
        // 泛型类创建对象,没有指定类型,将按照object类型处理
        Generic objGen = new Generic("hello world");
        
        // 泛型类型本质都是相同的类类型
        System.out.println(strGen.getClass()); //class com.test.generic.Generic
        System.out.println(intGen.getClass()); //class com.test.generic.Generic
        System.out.println(objGen.getClass()); //class com.test.generic.Generic
    }
}

泛型类使用

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class ProductGet <T>{
    private T product; //奖品
    Random random = new Random();
    List<T>list = new ArrayList<>(); // 奖品池
    // 添加奖品
    public void addPro(T t) {
        list.add(t);
    }
    // 抽奖
    public T getPro() {
        product = list.get(random.nextInt(list.size()));
        return product;
    }
    
    public static void main(String[] args) {
        ProductGet<String> strProGet = new ProductGet<>();
        String[]strProArr = {"小米pad","华为手机","苹果pad","扫地机器人"};   
        for (int i = 0; i < strProArr.length; i++) {
            strProGet.addPro(strProArr[i]);
        }
        
        String Strpro = strProGet.getPro();
        System.out.println("获得了:"+Strpro);
        
        System.out.println("-----------------");
        ProductGet<Integer>intProGet = new ProductGet<>();
        int[]intProArr = {200, 1000, 3000, 10000};   
        for (int i = 0; i < intProArr.length; i++) {
            intProGet.addPro(intProArr[i]);
        }
        int intPro = intProGet.getPro();
        System.out.println("获得了:"+intPro);
    }
}

泛型类派生子类

1. 子类也是泛型类,子类和父类的泛型类型要一致
class ChildGeneric<T> extends Generic<T>
2. 子类不是泛型类,父类要明确泛型数据类型
class ChildGeneric extends Generic<String>

Parent

public class Parent<T> {
    private T val;

    public T getVal() {
        return val;
    }
    public void setVal(T val) {
        this.val = val;
    }
}

ChildFirst 子类也是泛型类

/**
 * 子类也是泛型类,子类的泛型类型要和父类的泛型类型一致
 * 子类可以进行泛型扩展
 * @param <T> 泛型类型
 */
public class ChildFirst<T,E,K> extends Parent<T> {
    @Override
    public T getVal() {
        return super.getVal();
    }
}

ChildSecond 子类不是泛型类

/**
 * 子类不是泛型类,父类要明确泛型数据类型
 */
public class ChildSecond extends Parent<String> {

    @Override
    public String getVal() {
        return super.getVal();
    }
}

泛型接口

interface 接口名称<泛型标识,泛型标识,....> {
    泛型标识 方法名();
}

1. 实现类不是泛型类,接口要明确数据类型
2. 实现类也是泛型类,实现类和接口的泛型类型要一致
public interface Generic<T> {
    T getKey();
}

public class Generic1Impl implements Generic<String>{

    @Override
    public String getKey() {
        return null;
    }
}
public class Generic2Impl<T> implements Generic<T> {
    @Override
    public T getKey() {
        return null;
    }
}

相关文章

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • JAVA 核心笔记 || [xxx] 泛型

    泛型 JAVA 的参数化类型 称为 泛型 泛型类的设计 Learn12.java 运行

  • 想理解泛型吗?看这一篇就够了!

    一、前言二、泛型类2.1 概述Java中泛型使用情况大致包括三种:泛型类、泛型接口、泛型方法 本节演示泛型类。 2...

  • Kotlin 泛型

    Kotlin 支持泛型, 语法和 Java 类似。例如,泛型类: 泛型函数: 类型变异 Java 的泛型中,最难理...

  • 泛型依赖注入

    泛型依赖注入 1.定义泛型 Java代码: 2.实现基类,声明泛型 Java代码: xml代码:

  • 泛型

    与Java泛型相同,Kotlin同样提供了泛型支持。对于简单的泛型类、泛型函数的定义,Kotlin 与 Java ...

  • kotlin--泛型

    kotlin作为一种高级语言,也提供了泛型,它的泛型比Java更为灵活 一、泛型类 1.定义泛型类 定义泛型类和J...

  • Android 学习(一):Java 泛型

    Java泛型学习 1.0 泛型常用案例 2.0 泛型方法 3.0 泛型类 4.0 通配符 ? 通配符,占位符,标识...

网友评论

      本文标题:java 泛型类

      本文链接:https://www.haomeiwen.com/subject/kfzhtdtx.html