这是很难解释的,但我看到无处不在,我找不到任何好的答案.
有一个例子,使其更容易理解:
假设我有一些名为SelfMaker的界面:
public interface SelfMaker {
public SELF getSelf();
}
A有一只狗,可以与另一只狗一起生育.所以狗是一个“SelfMaker”,像这样:
public class Dog implements SelfMaker {
String color;
public String toString() {
return "some " + color + " dog";
}
public Dog procreate(Dog anotherDog) {
Dog son = getSelf();
son.color = color;
return son;
}
@Override
public Dog getSelf() {
return new Dog();
}
}
但是,我有一个国内狗,他是一个狗,但它有一个可爱的家庭命名他.喜欢这个:
public class DomesticDog extends Dog {
private String name;
public String toString() {
return super.toString() + " named " + name;
}
}
现在,我有一些类处理“SelfMaker”的对象,让我们把这个类称为“Couple”.喜欢这个:
public class Couple> {
private T first;
private T second;
public String toString() {
return first.toString() + " and " + second.toString();
}
}
例外:
当我想要创建几个DomesticDogs时出现异常.喜欢这个:
public class CoupleOfDomesticDogs extends Couple{
public DomesticDog procreate(){
DomesticDog son = first.procreate(second);
return son;
}
}
这将在< DomesticDog>上引发异常抱怨:绑定不匹配:类型DomesticDog不是有界参数的有效替代< T extends SelfMaker&T>>的类型为< T>
我已经尝试将泛型变量从类别更改为:Couple< T extends SelfMaker>但“儿子”不会是国内家庭(我想让“儿子”成为国内家庭).如果我添加一些演员,那么它将编译,但它将不那么清晰.
所以…这里是一个问题:有没有办法实现这一点,没有铸造和泛化?