2

我有一个静态嵌套类,我想通过静态访问器(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 是一个类,而不是变量,但是,由于其他原因,我需要将列保留为静态类。我什至不确定这是否可行,但只想问是否有?

谢谢!

4

5 回答 5

2

好吧,如果你的静态嵌套类是公共的,就像你的例子一样,我想知道为什么你要创建一个访问器,而你可以直接访问嵌套类。

于 2010-01-22T06:09:44.733 回答
1

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

 return new Columns();

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

return new SomeClass().new Columns();

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

return new SomeClass.Columns();
于 2010-01-22T06:42:43.273 回答
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,这似乎是一个设计问题。您不能覆盖静态方法,因此继承可能会使事情变得更糟。

于 2010-01-22T08:19:14.873 回答
1

您要返回 Column还是 Column 的实例

对于前者,您可以使用

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

对于后者,您可以使用

return new SomeClass.Columns();
于 2010-01-22T06:57:57.900 回答
0
 public static Columns<?> getColumnEnumerator()

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

怎么样

 return new Columns();

或者,如果您一直想要相同的实例

 return Columns.privateSingletonInstance;  // from a static field
于 2010-01-22T06:07:32.760 回答