Java 非泛型类扩展泛型类意味着什么 公共类B扩展C{ }
这是什么意思?C需要扩展A吗?我不是说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
并不意味着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> {
}