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();
}