Java 如何声明实现相同接口的类的内部类的实例
我有以下结构Java 如何声明实现相同接口的类的内部类的实例,java,oop,interface,inner-classes,Java,Oop,Interface,Inner Classes,我有以下结构 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{ ...
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
有些不同。然后,我有另一个类访问内部的作为
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
量身定做的。如果我理解你的意思,这取决于你的代码。我的意思是,如果您在X.java中的代码是:
import tests.A.Inside;
public class X {
public static void doSomeWork (Inside inside ){
}
}
然后,
中的是在A.java中实现的类,但是您可以使用以下方法更明确地实现它:
import tests.A;
public class X {
public static void doSomeWork (A.Inside inside ){
}
}
因此,方法参数是不言自明的。我怀疑您是否需要此解决方案,
但是:
更简单,其中A\B可以将实际执行委托给内部类:
interface I{
Object doWork();
}
问题是,您的两个内部
类型目前是不相关的-当它们是完全不同的类型时,X.doSomeWork()
无法引用“是这个类型还是那个类型”。事实上,它们都是嵌套类,在
内部称为
如果您将常见行为(即X
想要调用的行为)提取到接口中,并使内部的类实现该接口,那么您可以使用该通用性。基本上,如果它们不是嵌套类,并且没有相同的名称,您会做什么?因为X
不关心这两个方面。两个内部类型是否实现了一个公共接口?您是如何在X.java中导入内部类的?您可以使用A.Inside或B.Inside显式执行此操作在本例中接口I
的作用是什么?@JonSkeet这是一个非常好的问题,我的朋友!!!我有一个问题:内部的每个都有一组不同的静态常量。我将尝试使用它(即内部的公共接口),并尝试使用instanceof
和casting解决它们:我不知道这是否有效。但是谢谢你提出这个好问题。但是为了说明这一点:我希望X不依赖于实现。那么,当实现没有任何共同点时,它怎么可能不依赖于实现呢?您知道,就编译器和JVM而言,您的两个内部类是完全不相关的,对吗?事实上,它们都在内部被称为,这与此无关。
interface I{
Object doWork();
}