你好,我有两个类:Person类和Employee类,它们扩展了Person
public class Person {
private String name;
private String surname;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public Person(String name, String surname) {
super();
this.name = name;
this.surname = surname;
}
}
public class Employee extends Person {
private String salary;
private String position;
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public Employee(String name, String surname, String salary, String position) {
super(name, surname);
this.salary = salary;
this.position = position;
}
}
我想写一个函数,将添加人到下界参数化列表
public class AuxiliaryClass {
public static void addToList(List<? super Employee> list){
Person osoba1 = new Person("Czeslaw","Spiewa");
list.add(osoba1);
}
}
但是eclipse不允许它,错误消息是:“类型列表中的方法add(capture#1-of?super Employee)不适用于参数(Person)
<代码>列表<?super Employee>表示“一些未知但具体的类X的列表,即Employee
的超类。
现在应该清楚为什么不能将Person
类型的对象添加到此列表中:Person
不是X
。
也许,如果你解释一下你在这里真正想做的是什么,我们会有更多的帮助。
更新:实际上,我收回它。Person
是X
,因为它是Employee
的子类,而Employee是X
的子类。应该有可能将其添加到列表中。看起来eclipse充满了它。Javac(1.8)允许我这样做,IntelliJ也允许这样做。
很抱歉引起了混乱。
问题内容: 好了,所以我知道,并且是接口,但是是什么让的第一行代码的任何好于第二行? 问题答案: 如果你使用第一种形式,则是说你将要使用的只是接口的功能-别无其他,尤其是它的任何实现都没有增加任何额外的内容。这意味着你可以很容易地改变所使用的实现(例如,刚刚替补用于在实例化),而不用担心它打破了代码的其余部分,因为你可能已经使用一些特定的。
问题内容: 我认为你不能将Java泛型类型参数绑定到下限(即使用关键字)。我正在阅读Angelika Langer泛型常见问题解答对此主题的看法。他们说,这基本上可以归结为无用的下限(“没有任何意义”)。 我不相信。我可以想象它们的用途是帮助你更灵活地调用产生类型化结果的库方法的调用者。想象一下一个方法,该方法创建了用户指定大小的数组列表,并用空字符串填充了该列表。一个简单的声明是 但这不必要地限
以下签名是有效的,在Scala中是常用的: 但是,由于是Java中的Scala等价物,所以转换此签名的第一个想法(用替换函数类型,并使用Use-Site方差注释,也就是有界通配符)是 但是哦不!编译器抱怨中的标记,因为您不能有下限类型变量!现在,我如何在Java代码中编写这个方法,而不必穿越时间回到泛型在Java世界中还不存在的时候呢? 是的,我知道您认为我可以使用,但这不是一回事,如我的实现所示
在GSON中获取对象列表 遗憾的是,返回的是StringMaps数组,而不是类型。T被解释为另一个泛型类型,而不是我的类型。有什么办法吗?
问题内容: 您认为可以创建类似的东西吗? 问题答案: 是的你可以。 用法示例:
我想使用泛型类作为另一个泛型类的类型参数。 起初,我对类的定义是这样的: 然后我的需求发生了变化,我不得不为我的R类型使用包装器/持有者类 到目前为止,我的尝试:(给出编译时错误: