栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java:枚举常量中方法和变量的定义

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java:枚举常量中方法和变量的定义

如果我在常量中创建public方法并没有此方法而将枚举留为空白,为什么没有任何错误?在这种情况下,我刚刚定义的方法根本无法调用。还是我错了?

实际上,编译器应该能够看到该方法在枚举常量的类主体之外不可见,并警告您是否未使用该方法-我确信Eclipse会这样做。正如

dasblinkenlight
指出的那样,这样的公共方法实际上可能是枚举实现的接口所声明的方法的替代。
[…]我刚刚定义的方法根本无法调用。还是我错了?

正确,您错了:Javaenum可以实现接口,如下所示:

interface Bar {    void myMethod();}enum Foo implements Bar {    VALUE_1 {        public void myMethod() { System.err.println("val1");        }    };}

现在您可以访问myMethodinside了VALUE_1。当然,您将不得不以其他值或enum本身来实现此方法。此外,您始终可以通过反射来访问语言无法访问的方法。

就公共变量而言,似乎反射是这里的唯一方法。尽管如此,没有理由完全禁止此操作(尽管很难想象有一个有用的应用程序可供使用)。

您在某处使用过这种功能吗?

我确实使用了enum实现接口的,每个常量都以其特定方式实现接口的方法。

我只是不明白,为什么可以定义不可达的方法。我能想到的唯一原因是程序员正在工作并且还没有接口的定义。因此,他只是准备单个方法的代码,稍后将添加“
implements”关键字。除了这是不合逻辑的,它仍然需要在所有常量中都使用这种方法。

如前所述,这不适用于枚举常量类。范围很广-私有嵌套类,本地类,匿名类-成员公开是毫无意义的。

这个问题的问题在于只有语言设计师才能真正回答它。我只能给出我的意见,那就是:为什么要出错?语言规范不是免费提供的-
必须精心定义JLS中的所有内容,然后实施和测试。真正的问题是,使它成为错误有什么好处?唯一的事实是,尽管一个未使用的成员可能表示一个错误(因此发出警告),但它没有任何
伤害

如果在常量内创建公共变量(或更精确地说,字段),为什么没有任何错误?在任何情况下(从外部)都无法访问它。因此,修饰符“
public”在这里没有任何意义。

与上面相同-
如果未使用变量,则编译器或至少某些IDE会警告您。这与您

public
private
嵌套类中声明变量然后没有在任何地方引用它相同。在任何情况下,禁止JLS优先考虑禁止这种情况,尽管反射的眼睛可以看到一切。

除了可见性修饰符在这里完全没有用处之外,它与上一点更没有相同之处。它是公共的,受保护的还是私有的都没关系,因为您无论如何都无法访问它。我认为这是一个错误。

在这里,您忘记了成员可能仍会在枚举常量类主体中使用-例如考虑一个辅助方法。只是在这种情况下,访问修饰符无关紧要,可以忽略。

为什么可以定义一个类(没有可见性修饰符),但是不能定义接口呢?是的,您可能不想编写如此残酷的枚举,以至于需要在常量内定义类,甚至在该常量内使用继承。但是,如果可以定义类和抽象类,这似乎并不奇怪。

这是一个很好的问题,我花了一段时间了解您的意思。为了澄清,您是说在这种情况下仅允许该类:

VALUE_1 {    class Bar { }    interface Baz { }},

为了阐明这一点,请尝试上课

static

VALUE_1 {    static class Bar { }    interface Baz { }},

现在都不允许。为什么?

static
枚举常量主体中不能声明任何内容,因为该主体处于该常量 实例 的上下文中。这类似于在内部(非静态嵌套)类的范围内:

class Outer {    class Inner {        // nothing static allowed here either!    }}

在这种范围内,静态变量,方法,类和 接口 (嵌套时隐式静态)都是禁止的。

您在某处使用过这种功能吗?我可以想象它可能有用,但是一点也不令人困惑。另外,当我搜索有关此的一些资源时,我什么也没找到。

目前尚不清楚您在此指的是什么功能。请更新问题以指定您要查找的内容-枚举常量类主体中的重写方法?田野?辅助方法?助手班?请澄清。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508440.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号