我应该如何声明实现相同接口的类的内部类的实例

时间:2014-03-21 17:43:53

标签: 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{
    ...
    //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

量身定制

3 个答案:

答案 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并不关心那些方面。