我在JAVA中有以下设计问题:我有以下接口I1,我想使用多个类A1,A2,...但是getGain方法中的参数 应具体到实施A1,A2 ....
public interface I1{ public Double getGain(I2 i2);}
I2本身就是一个具有两个实现B1,B2的接口。
然后我有两个实现此接口I1的类:A1,A2
Class A1 implements I1{
@Override getGain(I2 i2){
// here I expect the implementation B1 of class I2,
//as I may need to create new B1(...)
}
和
Class A2 implements I1{
@Override
getGain(I2 i2){
//here I expect the implementation B2 of class I2,
//as I may need to create new B2(...)
}
解决方案1:
public interface I1<K extends I2>{
public Double getGain(K i2);
}
但是我会添加这个&lt;&gt;在使用I1的任何类中,根本不可读。
解决方案2: 失去I1中的通用性并最终拥有
public interface I1{
public Double getGain(C1 i1);
}
public interface I2{
public Double getGain(C2 i2);
}
有更好的解决方案吗?
我的意思是,现在让我说我有一些其他泛型类,例如一个应该返回I1的方法,应该是 通用以及我必须在计算器中携带I1的通用性:
class P<K extends I2{
I1<K> getI();
}
此外,如果现在我还有另外2个接口J2,K2。
现在如果I1<I extends I2, J extends J2, K extends K2>
我有
class P<I extends I2, J extends J2, K extends K2>{
I1<I> get1();
J1<J> get2();
K1<K> get3();
}
也许这是正常的,但我更像是仿制药的新手:)
答案 0 :(得分:0)
但是我会在使用I1的任何类中添加此
<>
,这根本不可读。
这是完全合理的。大多数Java开发人员都准备在实现泛型类时再输入两个字符。
您的解决方案1是一种普遍接受的方式,在这种情况下,它将为您提供最佳的可读性和代码重用。
答案 1 :(得分:0)
即使我们接受你的前提,即泛型类名称(其中包含<>
的名称)是&#34;不可读&#34;,假设您只希望两个类实现I1,那么您的大多数代码都会可能直接引用A1和A2类。这些类名称不具有任何通用参数。