Java:返回静态嵌套类

时间:2010-01-22 06:01:34

标签: java static getter nested-class

我有一个静态嵌套类,我想通过静态访问器(getter)返回。

public class SomeClass
{
    public static class Columns<CC>
    {
        ...

        public static int length = 5;
    }

    public static Columns<?> getColumnEnumerator()
    {
        int x = Columns.length; //no problems

        return Columns; //compiler error
        //cannot find symbol: variable Columns location: blah.blah.SomeClass
    }
}

我知道为什么这不起作用,因为Columns是一个类,而不是变量,但是,由于其他原因,我需要将列保持为静态类。我甚至不确定这是否可行,但只想问是否有?

谢谢!

5 个答案:

答案 0 :(得分:2)

好吧,如果您的静态嵌套类是公共的,就像在您的示例中一样,我想知道为什么要在可以直接访问嵌套类的同时创建访问器。

答案 1 :(得分:1)

您仍需要实例化类,例如:

 return new Columns();

如果列不是静态的,并且您想从其他地方实例化它,则需要外部类的实例

return new SomeClass().new Columns();

使用您的解决方案,您可以:

return new SomeClass.Columns();

答案 2 :(得分:1)

是否要返回 的实例?

对于前者,您可以使用

return SomeClass.Columns.class; // SomeClass.Columns can also be accessed directly,
                                // since it is public.

对于后者,您可以使用

return new SomeClass.Columns();

答案 3 :(得分:1)

如果您实际解释了如何使用Columns类,这可能会有所帮助。您是想尝试获取它的实例还是想要获得它的类?

您可以返回Class个实例,以允许您的调用方法在其上使用newInstance()

public static Class<Columns> getColumnEnumerator()
{
    int x = Columns.length;

    return Columns.class;
}

或者您必须将Columns修改为:

public class SomeClass
{
    public static class Columns<CC>
    {
       public final int LENGTH = 5;  // changed to a final, or create an accessor

       ...

       private Columns() { ... }  // private constructor
    }

    public static Columns<?> getColumnEnumerator()
    {
        Columns columns = new Columns();  // only SomeClass can instantiate this
        int x = columns.LENGTH;

        return columns;
    }
}

但是你的一篇评论是关于“为SomeClass创建一个返回Columns的超类”,这似乎是一个设计问题。你不能覆盖静态方法,所以继承可能会使事情变得更糟。

答案 4 :(得分:0)

 public static Columns<?> getColumnEnumerator()

这意味着您需要返回一个Columns实例。

怎么样

 return new Columns();

或者,如果您希望始终使用相同的实例

 return Columns.privateSingletonInstance;  // from a static field