首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java -可以在不创建新实例的情况下从内部类返回值吗?

Java -可以在不创建新实例的情况下从内部类返回值吗?
EN

Stack Overflow用户
提问于 2015-08-10 19:20:19
回答 2查看 854关注 0票数 1

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

这是一个例子

代码语言:javascript
运行
复制
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;
    } 
}

虽然它有可能通过

代码语言:javascript
运行
复制
int a = TREE.PLAYER.NAME;

我也希望能够获得价值

代码语言:javascript
运行
复制
int b = TREE.PLAYER;

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

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

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-10 19:56:56

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

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

代码语言:javascript
运行
复制
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中合法的短标识符,如$_

代码语言:javascript
运行
复制
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.$

票数 1
EN

Stack Overflow用户

发布于 2015-08-10 19:25:00

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

代码语言:javascript
运行
复制
Class b = TREE.PLAYER.class;

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31927456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档