我希望能够声明一个Java类Ref,以便我可以在代码中的其他地方执行以下操作:
switch (v)
{
case Ref.LicenseCode: ....;
case Ref.Widget.MaxWeight: ....;
case Ref.Widget.MolyBolt.ThreadsPerInch: ....;
}
Ref旨在成为表示常量值的分层集合的常量数据结构,例如经常出现在标准文档或其他参考材料中。我想要真正恒定的值(因此它们可以在case语句中使用)。
我认为我可以通过嵌套类定义来实现这一点,并且它可以...到某一点。例如:
public final class Ref
{
public final static int LicenseCode = 800;
public final class Widget
{
public final static int MaxWeight = 5000;
}
}
让我写下这个:
switch (v)
{
case Ref.LicenseCode: ....;
case Ref.Widget.MaxWeight: ....;
}
但是当我尝试嵌套到第三级时:
public final class Ref
{
public final static int LicenseCode = 800;
public final class Widget
{
public final static int MaxWeight = 5000;
public final class MolyBolt
{
public final static int ThreadsPerInch = 12;
}
}
}
我被告知:
"Ref.Widget.MolyBolt cannot be resolved or is not a field."
我做错了吗?或者我碰到了Java的一个边缘?还有其他方法可以实现我的目标吗?我使用Eclipse Java开发工具3.5.2.r352在Windows Vista,JCK 1.6.0-21下运行。
答案 0 :(得分:2)
看起来像物料清单信息给我。将它作为静态数据嵌入Java类中对我来说似乎非常严格。将它存储在关系,层次结构,对象或图形数据库中更为自然。
另一个问题是处理它的代码将是if / then / else或switch语句的意大利面森林。
很难夸大这看起来多么错误。你可能得到一个允许你继续的答案,但这只能以悲伤结束。
答案 1 :(得分:0)
您如何引用ThreadsPerInch
字段?这对我有用:
public final class Ref {
public final static int LicenseCode = 800;
public final class Widget {
public final static int MaxWeight = 5000;
public final class MolyBolt {
public final static int ThreadsPerInch = 12;
}
}
public static void main(String[] args) {
int v = Integer.valueOf(args[0]);
switch (v) {
case Ref.LicenseCode:
break;
case Ref.Widget.MaxWeight:
break;
case Ref.Widget.MolyBolt.ThreadsPerInch:
break;
}
}
}
我唯一要做的就是让内部类静态,尽管你可能不会实例化这个类的任何对象。