英文:
Java - Extend class with enum
问题
我有一个名为 BaseNumber
的类,其中有一个 protected static enum Base
,还有另一个名为 ArithmeticBaseNumber
的类,它继承自 BaseNumber
。<br>
我可以从 BaseNumber
访问 Base
枚举,但不能从 ArithmeticBaseNumber
访问。<br>
有没有办法访问这个枚举?<br>
谢谢!
编辑 - 代码:
public class BaseNumber {
protected static enum Base {
X, Y, Z
}
}
public class ArithmeticBaseNumber extends BaseNumber {}
问题在于 BaseNumber.Base.X
可以正常工作,但 ArithmeticBaseNumber.Base.X
报错 "The type ArithmeticBaseNumber.Base is not visible"。
英文:
I have a class BaseNumber
with a protected static enum Base
, and another class ArithmeticBaseNumber extends BaseNumber
. <br>
I can access the Base
enum from BaseNumber
, however not from ArithmeticBaseNumber
. <br>
Is there a way to access the enum? <br>
Thank you!
Edit - The code:
public class BaseNumber {
protected static enum Base {
X, Y, Z
}
}
public class ArithmeticBaseNumber extends BaseNumber {}
The problem is that BaseNumbe.Base.X
works fine, however ArithmeticBaseNumber.Base.X
gives "The type ArithmeticBaseNumber.Base is not visible" error.
答案1
得分: 1
Java不支持静态成员的继承,静态成员可以在创建它的类上调用。
英文:
Java doesn't support the inheritance of static members, a static member is callable on a class in which it has been created.
答案2
得分: 0
以下是翻译好的内容:
它可以被访问。尝试下面的示例。
package com.example.demo.enumexample;
public class BaseNumber {
protected static enum Base {
FIRST("first"),
SECOND("second"),
THIRD("third");
String httpMethodType;
Base(String s) {
httpMethodType = s;
}
public String getHTTPMethodType() {
return httpMethodType;
}
}
public static void main(String[] args) {
Base baseNum = Base.FIRST;
System.out.println(baseNum);
}
}
在ArithmeticBaseNumber.java中
package com.example.demo.enumexample;
import com.example.demo.enumexample.BaseNumber.Base;
public class ArithmeticBaseNumber extends BaseNumber {
public static void main(String[] args) {
Base baseNum = Base.FIRST;
System.out.println(baseNum);
}
}
输出将会是:
>FIRST
在你的示例代码中,
package com.example.demo.enumexample;
public class BaseNumber {
protected static enum Base {
X, Y, Z;
}
public static void main(String[] args) {
Base baseNum = Base.X;
System.out.println(baseNum);
}
}
以及
package com.example.demo.enumexample;
public class ArithmeticBaseNumber extends BaseNumber {
public static void main(String[] args) {
Base baseNum = Base.X;
System.out.println(baseNum);
}
}
输出将会是:
>X
英文:
It can be accessed. Try below example.
package com.example.demo.enumexample;
public class BaseNumber {
protected static enum Base{
FIRST("first"),
SECOND("second"),
THIRD("third");
String httpMethodType;
Base(String s) {
httpMethodType = s;
}
public String getHTTPMethodType() {
return httpMethodType;
}
}
public static void main(String[] args) {
Base baseNum = Base.FIRST;
System.out.println(baseNum);
}
}
And in ArithmeticBaseNumber.java
package com.example.demo.enumexample;
import com.example.demo.enumexample.BaseNumber.Base;
public class ArithmeticBaseNumber extends BaseNumber{
public static void main(String[] args) {
Base baseNum = Base.FIRST;
System.out.println(baseNum);
}
}
Output will be :
>FIRST
In your example code,
package com.example.demo.enumexample;
public class BaseNumber {
protected static enum Base{
X, Y, Z;
}
public static void main(String[] args) {
Base baseNum = Base.X;
System.out.println(baseNum);
}
}
And
package com.example.demo.enumexample;
public class ArithmeticBaseNumber extends BaseNumber{
public static void main(String[] args) {
Base baseNum = Base.X;
System.out.println(baseNum);
}
}
Output will be :
>X
答案3
得分: 0
你正在定义的枚举类型是 BaseNumber.Base
,而不是 ArithmeticBaseNumber.Base
或者简单的 Base
。
因此,请使用它的正确名称 BaseNumber.Base
进行引用,一切都会正常。
你可以(但可能不应该)通过导入以下方式使简单名称 Base
生效:
import mypackage.BaseNumber.Base;
注意:如果你想使用短名称,我通常建议将 Base
枚举移到自己的文件中 - 对我来说,点号语法是一个重要的提示,它提醒我们正在讨论 BaseNumber
的一些内部元素。
类似的情况是,出于可读性的原因,我总是使用 Map.Entry
而不是 Entry
(不清楚它与 Map
相关)或者 HashMap.Entry
(完全错误,Entry
不是 HashMap
的一部分)。
英文:
The one enum type you're defining is BaseNumber.Base
and not ArithmeticBaseNumber.Base
nor simply Base
.
So just reference it by its proper name BaseNumber.Base
, and everything is fine.
You can (but probably shouldn't) make the simple name Base
work by importing:
import mypackage.BaseNumber.Base;
Caveat: if you want to use the short name, I'd typically recommend moving the Base
enum out into its own file - to me, the dotted syntax is an important reminder that we're talking about some internal element of BaseNumber
.
As a similar case, for readability reasons, I always stay with Map.Entry
instead of Entry
(unclear that it's related to Map
s) or HashMap.Entry
(plain wrong, Entry
isn't part of HashMap
).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论