关于泛型的小问题一个

public class Student {

public String id;

public String name;

public Set<Course> courses;就是这里有疑问

public Student(String id, String name) {
    this.id = id;
    this.name = name;
    this.courses = new HashSet<Course>();
}

}

package com.imooc.collection;

/**

  • 课程类
  • @author Administrator
    *
    */
    public class Course {

    public String id;

    public String name;

    public Course(String id, String name) {
    this.id = id ;

    this.name = name;
    

    }

    public Course() {

    }
    }
    为什么在student类中定义的时候,public Set courses; set中的菱形括号
    可以写Course类??菱形括号里面不是只能写类型么?

自己创建的Course对象也是属于引用类型的,本质上和String,Integer等都是一样的,你看一下jdk的源码就知道了,String,Integer等也是一个类,只不过是被封装成了jar包而已

不仅仅是类型,也可以是一个对象,

你指的类型是什么?是int?是double?
按照一般理解来说类也是一种类型,只不过是自定义的,当然可以放在<>中了

尖括号中放的是数据类型,Course是你建的一个类,它也是一个引用数据类型,Set表示Set集合中只能放入Course类型的对象.这是泛型在集合中最常见的一种体现,保证了集合的安全性,在遍历集合时,取到的对象类型为尖括号中指定的类型,不是Object类型,因此不用强制类型转换.

public Set course;
Course是 Set的泛型,约束 存入到该Set 的数据类型只能是Course类型的,因为泛型可是基本类型也可以是引用类型。
而 Set 是变量 course的类型,这是引用类型,变量的类型可以是引用类型也可以是基本类型。

这个是泛型吧!泛型可以