猿问

泛型接口后的尖括号是干嘛的?


比如下段代码,尖括号里那个类是干嘛的?

class Employee implements Comparable<Employee> {

  public int conpareTo(Employee o) {

      return Double.compare(salary,o.salary);

  }

}

要是没有那个尖括号,这个实现类里的方法就应该写成下面这样,为什么?

public int compareTo(Object o) {

   Employee e = (Employee)o;

   return Double.compare(salary, e.salary);

}

fenkapian
浏览 4867回答 3
3回答

一生放荡不羁丶人称小小风

这个嘛.泛型是用来处理具有相同处理逻辑,但是处理的数据类型不同的情况.也就是泛型类只指代了逻辑,没指定处理的数据类型,而在创建泛型类的对象时候进行动态指定数据类型.尖括号中的内容<E>便是你告知编译器你创建的这个泛型类对象处理哪种数据类型.比如<Employee>,类型为Employee类对象.同理继承一个泛型类的时候你也可以为父类指定处理的类型,这样继承的子类就是只针对于某种特定类型进行处理.比如 a implements b<Employee>.这样a类接受的参数类型便限定为只能是Employee.这样你便可以看出,你上面的类只能接受Employee类型参数,所以直接使用作为参数的Employee对象的成员变量就好了.而如果你没用在尖括号中指定特定的类型.便是使用Object类作为类型参数.接受到的参数为object类型(所有类型的父类),如果你使用Employee类型作为参数传递进来,因为是Object子类所以可以传递过来,但是在类中处理的是Object类型,如果你想使用Employee类中的特有变量,便要将Object类型向下强制转型为Employee类型对象.比如: Employee e=(Employee)o;这样变可以使用Employee中的字段e.salary.

精慕门9254224

那就是范型对应的类么,如果你不填写employee,范型默认用超类Object来对应,那么你就要向下转型了!
随时随地看视频慕课网APP

相关分类

Java
我要回答