Java 非泛型类扩展泛型类意味着什么 公共类B扩展C{ }

Java 非泛型类扩展泛型类意味着什么 公共类B扩展C{ },java,generics,inheritance,Java,Generics,Inheritance,这是什么意思?C需要扩展A吗?我不是说B扩展了C,而是加了什么额外的限制?C并不意味着C扩展了A,这意味着它可以将A作为类型参数 这与java中的Comparable和Comparator接口非常相似 考虑下面的例子 public class B extends C <A> { } 公共类NameSort实现了Comparator{ 公共整数比较(一名员工,另一名员工){ return(int)(一个.getName()-另一个.getName()); } } 意味着Compa

这是什么意思?C需要扩展A吗?我不是说B扩展了C,而是加了什么额外的限制?

C
并不意味着
C
扩展了
A
,这意味着它可以将
A
作为类型参数

这与java中的
Comparable
Comparator
接口非常相似

考虑下面的例子

public class B extends C <A> {

}
公共类NameSort实现了Comparator{
公共整数比较(一名员工,另一名员工){
return(int)(一个.getName()-另一个.getName());
}
}
意味着Comparator正在使用Employee对象来使用其名称对其进行排序

你也可以举另一个例子

public class NameSort implements Comparator<Employee> {
   public int compare(Employee one, Employee another){
       return (int)(one.getName() - another.getName());
   }
}
List List=new ArrayList();

这一行表示
List
使用
String
对象作为参数

B
C

C
B
A
参数化。(这意味着他们可以有使用
A
方法的方法,或者从A派生的类的方法。)

这方面的一个典型用例是您有一个DAO(数据访问对象)。您可以使用一些基本方法创建泛型DAO,例如使用泛型
save
方法创建
GenericDAO
。为了使其他DAO可以扩展
GenericDAO
,您可以使用
实体
参数化该类,并确保所有
实体
都可以保存


然后是
GenericDAO,在本例中,
C
是一个可以接受泛型参数的类,您将给它一个特定类型
a
作为参数。然后,
B
扩展了
C
的特定参数化

例如,假设:

   List<String> list = new ArrayList<String>();
C类{
T示例();
}
B类扩展到C类{
}

然后
B.example()
将返回一个
整数

您正在定义一个从类C继承的类B,该类用类型a参数化。a必须是类或接口

例如

但您将无法将其分配给具有其他参数的
列表
类型变量:

List<String> strings = new MyStringList();
List objects=new MyStringList();//不编译
简单地说 这并不意味着什么,除非在
类C
或其上升项中定义了一些方法来接受返回类型A参数

通过这样做,您就确保了类型的安全性,通过施加限制说“他们可以接受或返回类型A的对象”。
公共B类扩展了C类{
}
  • 如果A未定义,则对B没有限制(可以是对象类的任何一个)
  • 如果定义了A的类型,那么B必须是A的类型或A的子类

  • 谢谢你能详细解释一下“将a作为类型参数”是什么意思吗?我已经更新了我的答案@Victor,按类型,我的意思是,您可以在泛型类中使用该类型。
    java.util.List
    是一个接口,以防您想要更正它。当前示例没有解释使用
    B类
    而不是直接使用
    C
    的任何好处。只有在
    B
    中存在一些特定于
    Integer
    的行为时,它才真正有意义。
    class MyStringList extends ArrayList<String>
    
    List<String> strings = new MyStringList();
    
    List<Object> objects = new MyStringList(); // does not compile
    
    public class B extends C <A> {
    
    }