我有以下结构
public interface I{...}
public class A implements I{
....
public static class Inside{
...
//data from here are used in A. Therefore tight coupling.
}
}
public class B implements I{
....
public static class Inside{
...
//data from here are used in B. Therefore tight coupling.
}
}
请注意,A.Inside
的实施与B.Inside
略有不同。然后我有另一个访问Inside
的类
public class AW extends X{
...
}
public class BW extends X{
...
}
public class X{
...
public Obj doSomeWork(Inside inside){
mInside = inside;
....//some work
}
}
//UsageB is similar in it's implementation of the B stack
public class UsageA{
A.AW inst = new AW();
Inside in = A.Inside();
inst.doSomeWork(in);
}
问题: mInside
的类型应该是什么?我不想要两个mInside
变量。
AW
专为A
量身定制,BW
专为B
答案 0 :(得分:0)
如果我了解你,这取决于你的代码。我的意思是,如果您在X.java中的代码是:
import tests.A.Inside;
public class X {
public static void doSomeWork (Inside inside ){
}
}
然后Inside
是在A.java中实现的类,但是您可以使用以下命令更明确地执行:
import tests.A;
public class X {
public static void doSomeWork (A.Inside inside ){
}
}
所以方法参数不言自明。
答案 1 :(得分:0)
我怀疑你需要这个解决方案, 但是:
interface I{
IInside getInside();
}
interface IInside{
Object doWork();
}
class X {
private I state;
}
更简单,其中A \ B可以将实际执行委托给内部类:
interface I{
Object doWork();
}
答案 2 :(得分:0)
问题在于,您的两种Inside
类型目前无关 - 当X.doSomeWork()
完全不同类型时,“{1}}无法引用”此类型或类型“。事实上,它们都是名为Inside
的嵌套类,没有任何区别。
如果将常见行为(X
想要调用)提取到接口中并使两个Inside
类实现该接口,那么然后就可以使用该通用性。如果不是嵌套类并且没有具有相同的名称,那么基本上就是你要做的事情,因为X
并不关心那些方面。