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