美文网首页
JAVA中的泛型

JAVA中的泛型

作者: 虫yu | 来源:发表于2018-11-14 16:49 被阅读0次

使用泛型的好处:不必在使用Collection接口及其子接口操作数据的时候,一直对Object数据进行强制转换

List在定义时就规定了泛型,所以存入取出的时候类型都是既定的Course类型

  • Course.java
package com.collection;

/**
 * 课程类
 * @author my-mac
 *
 */
public class Course {
    public String id;
    public String name;
    
    /**
     * 当此无参构造器没有实现的时候
     * 继承此类的子类将会报错:Implicit super constructor Course() is undefined for default constructor. 
     * Must define an explicit constructor
     * 原因:继承此类的子类,必须要隐式的调用无参的构造器。
     * 但是此类声明了有参构造器,所以不会生成隐式的构造器,需要手动生成一个显式的无参构造器
     */
    public Course() {
        // TODO Auto-generated constructor stub
    }
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        if(id == ""){
            System.out.println("请输入id");
        }else{
            this.id = id;
        }
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        if(name == ""){
            System.out.println("请输入name");
        }else{
            this.name = name;
        }
    }
 
    public Course(String id, String name){
        this.setId(id);
        this.setName(name);
    }
}
  • ChildCourse.java
package com.collection;

public class ChildCourse extends Course {

}
  • TestGeneric.java
package com.collection;

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

public class TestGeneric {

    /**
     * 带有泛型Course的List类型的属性
     */
    public List<Course> course;
    
    public TestGeneric(){
        this.course = new ArrayList<Course>();
    }
    
    public void testAdd() {
        Course cr1 = new Course("1", "语文");
        course.add(cr1);
        /**
         * 报错:The method add(Course) in the type List<Course> is not applicable for the arguments (String)
         * 原因:泛型集合中,不能添加泛型规定的类型及其子类型以外的对象
         * course.add("能否添加一些奇怪的东西呢?");
         */
        Course cr2 = new Course("2", "java基础");
        course.add(cr2);
    }
    
    public void testForEach(){
        // 在泛型
        for (Course cr : course) {
            System.out.println(cr.id + ":" + cr.name);
        }
    }
    
    /**
     * 泛型集合可以添加泛型的子类型的对象的实例
     * @param args
     */
    public void testChild(){
        ChildCourse ccr = new ChildCourse();
        ccr.id = "3";
        ccr.name = "我是子类型的课程对象实例~~";
        course.add(ccr);
    }
    
    /**
     * 泛型不能使用基本类型
     * @param args
     */
    public void testBasicType(){
        /**
         * 报错:Multiple markers at this line
         * - Syntax error, insert "Dimensions" to complete ReferenceType 
         * - Syntax error, insert "Dimensions" to complete ReferenceType
         * List<int> list = new ArrayList<int>();
         */
        List<Integer> list = new ArrayList<Integer>();
        // 这里 int 类型的1被强制转换成了Int的包装类Integer,然后被加入到集合
        list.add(1);
        System.out.println("基本类型必须使用包装类型作为泛型:" + list.get(0));
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestGeneric tg = new TestGeneric();
        tg.testAdd();
        tg.testForEach();
        tg.testChild();
        tg.testForEach();
        tg.testBasicType();
    }
}

相关文章

  • JAVA泛型的理解

    泛型大家都接触的不少,但是由于Java历史原因,Java中泛型一直被称为伪泛型,因此对Java中的泛型,有很多不注...

  • Kotlin 泛型

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

  • Java泛型教程

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

  • Java泛型

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

  • Android 开发也要掌握的Java知识 - Java泛型

    如果需要看泛型擦除Java泛型擦除 1.Java泛型有什么用?为啥要使用泛型? Java中数组的类型是定义的时候就...

  • 15、泛型常用特点

    泛型常用特点 泛型是Java SE 1.5之后的特性,《Java 核心技术》中对泛型的定义是: “泛型” 意味着编...

  • 泛型中 ? super T和 ? extends T的区别

    首先, 说到 Java 的泛型, 我们必须要提到的是Java 泛型的类型擦除机制: Java中的泛型基本上都是在编...

  • java 泛型解析

    Java 泛型 1、泛型的精髓是什么 2、泛型方法如何使用 概述: 泛型在java中具有重要地位,在面向对象编程模...

  • Java 泛型

    一、概述 1.1 什么是Java泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型...

  • 泛型(一)

    1. Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化...

网友评论

      本文标题:JAVA中的泛型

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