Java - 是否可以在不创建新实例

时间:2015-08-10 19:20:19

标签: java class inner-classes static-classes

我想创建这样的结构,用户可以进入内部类,即使他自己停在课堂上也会收到一个值。

这是和示例

public abstract class TREE {
    public static class PLAYER{
        private static final int value = 100; //(idea example)where to store inner PLAYER value
        public static final int NAME  = 0;
        public static final int SURNAME  = 1;
    } 
}

虽然可以使用

来实现价值
int a = TREE.PLAYER.NAME;

我也希望能够使用

获得价值
int b = TREE.PLAYER;

我不想使用任何函数,而只是使用点运算符遍历路径。值本身可以存储在类中(比如我的示例在PLAYER类 value 下)或者只是以其他方式返回,但我不知道这是否可行。

也许其他结构我不知道会更适合这种结构。

由于

2 个答案:

答案 0 :(得分:2)

TREE.PLAYER是一种类型,因此您只能执行类似

的操作
Class b = TREE.PLAYER.class;

如果要获得类似int的值,则需要引用可以转换为int的公共字段。

Java不支持添加语法糖来假装一个类是一个int字段。

答案 1 :(得分:1)

不幸的是,在Java中,您无法定义“默认”值。在Java中,当你有一些语法结构时,你可以期望它的行为一致。不幸的是,这也阻止你创造“魔法”。

回到你的情况,最接近“默认”值的是创建与你的类同名的函数。在这种情况下,您可以通过向“类名”添加空括号来访问“默认”值:

public class TREE {

    public static int PLAYER() {
        return PLAYER.VALUE;
    }

    public final static class PLAYER {
        private PLAYER() {
        }

        public final static int VALUE = 1;
        public final static String NAME = "Player";
    }

    public static void main(String[] args) {
        System.out.println(TREE.PLAYER());
        System.out.println(TREE.PLAYER.NAME);
    }
}

另一种选择是使用Java合法的短标识符,例如$_

public final static class PLAYER {
    private PLAYER() {
    }

    public final static int _ = 1;
    public final static int $ = 1;
    public final static int VALUE = 1;
    public final static String NAME = "Player";
}

因此,您可以像这样访问“默认值”:TREE.PLAYER.$