我有一个父类from darren.py import compute_mean
和两个子类Parent
和A
。我有一个接口B
,该接口允许程序员编写将Type1转换为Type2的特定功能Function<Type1 extends Parent,Type2 extends Parent>
。该界面包装在类Type2 of(Type1 t)
中,该类包含有用的信息,例如Wrapper<Type1 extends Parent,Type2 extends Parent>
等。
当我尝试为Class<Type1> type1Class
类add
实现Wrapper
方法时,就会出现我的问题。我正在尝试将两个Wrapper<Type1,Type2> add(Wrapper<Type1,Type2> additionalWrapper)
加在一起,但是由于擦除,我很难输出Function
而不是Type2
。
如何使Parent
方法输出的是add
而不是Type2
?
Parent
答案 0 :(得分:1)
正如Louis Wasserman在评论中建议的那样,我需要在单个重写函数Parent add(Parent p)
中使用instanceof。
在A类和B类中,我需要具有以下功能:
@Override
public Parent add(Parent p){
if (p instanceof A){
A a = (A) p;
return add(a);
}
else if (p instanceof B){
B b = (B) p;
return add(b);
}
else return null;
}
答案 1 :(得分:0)
基本上,您没有两种添加A和B的方法,它是针对多态性或SOLID原理的。您可以像下面这样设计课程-
class A extends Parent{
public A(){ setValue(1); }
public A(int x){ setValue(x); }
public A(B b){ setValue( b.getValue()); }
@Override
public A add(Parent a){ return new A( getValue()+a.getValue()); }
}
class B extends Parent{
public B(){ setValue(2); }
public B(int x){ setValue(x); }
public B(A a){ setValue(a.getValue()); }
@Override
public B add(Parent b){ return new B(getValue() + b.getValue()); }
}
由于add
是在Parent中定义的,因此仅一种实现就足够了。在当前情况下,由于类add
中A
的签名与Parent
中的签名不匹配,因此方法根本不会被覆盖 < / p>
您将知道是否在添加方法上添加@Override
。编译器将引发错误。
希望这会有所帮助。