Java:返回静态嵌套类

Java:返回静态嵌套类,java,static,getter,nested-class,Java,Static,Getter,Nested Class,我有一个静态嵌套类,我希望通过静态访问器(getter)返回该类 公共类SomeClass { 公共静态类列 { ... 公共静态整数长度=5; } 公共静态列getColumnEnumerator() { int x=Columns.length;//没有问题 返回列;//编译器错误 //找不到符号:变量列位置:blah.blah.SomeClass } } 我知道为什么这不起作用,因为列是一个类,而不是一个变量,然而,出于其他原因,我需要将列保持为一个静态类。我甚至不确定这是否可行,但我想

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

公共类SomeClass
{
公共静态类列
{
...
公共静态整数长度=5;
}
公共静态列getColumnEnumerator()
{
int x=Columns.length;//没有问题
返回列;//编译器错误
//找不到符号:变量列位置:blah.blah.SomeClass
}
}
我知道为什么这不起作用,因为列是一个类,而不是一个变量,然而,出于其他原因,我需要将列保持为一个静态类。我甚至不确定这是否可行,但我想问问是否可行

谢谢

 public static Columns<?> getColumnEnumerator()
或者,如果您一直想要相同的实例

 return Columns.privateSingletonInstance;  // from a static field

如果您的静态嵌套类是公共的,如您的示例中所示,我想知道为什么您要创建一个访问器,而您可以直接访问嵌套类。

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

 return new Columns();
如果列不是静态的,并且您希望从其他地方实例化它,则需要外部类的实例

return new SomeClass().new Columns();
使用您的解决方案,您可以做到:

return new SomeClass.Columns();
是否要返回类的实例

对于前者,您可以使用

return SomeClass.Columns.class; // SomeClass.Columns can also be accessed directly,
                                // since it is public.
return new SomeClass.Columns();
对于后者,您可以使用

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

如果您实际解释如何使用
类,可能会有所帮助。你是想得到它的一个实例,还是想得到它是什么类

您可以返回一个
实例,以允许调用方法对其使用
newInstance()

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

    return Columns.class;
}

但是从您关于“为
SomeClass
创建一个超类,它返回
”的一条评论来看,这似乎是一个设计问题。你不能重写静态方法,所以继承可能会让事情变得更糟。

@gizmo,很抱歉我没有考虑这个问题,但我要为
SomeClass
创建一个超类,它返回
列,&
Columns
在每个子类中的实现方式不同。@bguiz:我认为我们都缺少了您当时试图实现的确切模式。你的问题能更具体一点吗?给出用例会很有帮助。@Kristian,
Columns
是一个完全静态的类(它的所有成员都是静态的),所以在这里实例化并不是一个真正的选项。@bguiz,我不太明白你在这里想要实现什么,静态类和静态方法是两个不同的东西…?请详细说明我们在这里试图实现什么。我不太确定实际的问题是什么:)。
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;
    }
}