如何在Java中声明一个常量的分层数据结构?

时间:2011-01-07 22:04:19

标签: java

我希望能够声明一个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下运行。

2 个答案:

答案 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;
        }
    }
}

我唯一要做的就是让内部类静态,尽管你可能不会实例化这个类的任何对象。