2014-11-17 62 views
-1

我有一个类似“Defining inner class outside java file”的问题。 但是,那里的提问者只是想通过让这些类全都在一个包中来做某件事。如何定义外部类之外的内部类

与他类似,我想定义一些类作为外部对象的内部对象;但我想访问该对象的动态字段。为了避免拥挤的类,我想在其他一些“innerClasses.java”中定义它们。使用“扩展”只能使我能够使用它的静态字段。但是,我想访问像内部对象一样的动态字段。

作为一个简单的例子(但其实是一个大的例子是有问题的)我想这个类的类“OuterClass.java”

public class OuterClass{ 
    double nonStaticField 
} 

而且每个类的其他类

public class InnerClass1OfOuterClass{ 
    ... 
} 

public class InnerClass2OfOuterClass{ 
    ... 
} 

public class InnerClass3OfOuterClass{ 
    ... 
} 

public class InnerClass4OfOuterClass{ 
    ... 
} 

.... 
+2

你是什么意思的“动态领域”? –

+1

如果这是可能的,这会让我震惊。 – wvdz

+0

你能概述课堂设计的外观吗? – Fildor

回答

1

“自然”的方式将是周围的其他方法:让一个内部类扩展含主代码一些抽象类:

class Outer { 
    class Inner extends InnerBase<Outer> { 
     ... little code 
    } 
} 

class InnerBase<T> { 
    protected int eger; 
    ... most code 
} 

然后还有一个委托给不同的班级。

现在,如果你还是想扩展内蒙古:

class InnerBase<T> { 
    protected int eger; 
    ... most code 
} 

class Sinner extends Outer.Inner { 
} 

Outer outer = new Outer(); 
Inner sinner = outer.new Sinner(); 

出于实用的目的,你可能在外面

protected Inner createInner() { return new Inner(); } 

创建和扩展外,覆盖工厂方法createInner。

此代码设计可能有点环境,因此我的“自然”在一开始。

+0

我很确定,OP并不需要这一切。我怀疑这里是一个XY问题。 – Fildor

+0

@Fildor对,这基本上是一个XY问题:“我怎么用这个螺丝刀工具锤钉子?”然而,利用正确的语言结构(工具)来实现“优雅”的代码需要一些尝试。这里可以假定OP有内部类的代码,现在想要清除它。不幸的是使用继承。 –

+0

扩展外部类是一个非常好的起点,如果你必须使用内部类来实现某些事情......尽管它可以很容易地用在错误的上下文/糟糕的设计中,但我总是喜欢它,总体思路是*很好! – Levit

相关问题