有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java是否可以在不创建新实例的情况下从内部类返回值

我想创建这样的结构,用户可以进入内部类,并接收一个值,即使他停止在类本身上

下面是一些例子

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 classvalue下),或者以其他方式返回,但我不知道这是否可行

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

谢谢


共 (2) 个答案

  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.$

  2. # 2 楼答案

    TREE.PLAYER是一种类型,因此您只能执行以下操作

    Class b = TREE.PLAYER.class;
    

    如果你想得到一个像int这样的值,你需要引用一个可以转换为int的公共字段

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