我有一个枚举,让我们称之为A:
public enum A
{
A,
B
}
Run Code Online (Sandbox Code Playgroud)
我有一个枚举A的函数:
public void functionA(A enumA)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
如何创建另一个枚举,可能调用B我可以传递给functionA?像这样的东西?
public enum B
{
C
}
functionA(B.C);
Run Code Online (Sandbox Code Playgroud)
我知道你不能扩展枚举,但我还有其他选择吗?实现这一目标的最佳方法是什么?
如果我有一个包含enum类型的类,我可以扩展此类并覆盖枚举类型或向此枚举添加更多常量吗?目的是用户将能够在getColor()不知道动态对象是来自基类还是派生类的情况下调用方法.例如:
public class Car {
private String name;
private CarColors color;
public enum CarColors {
BLUE,
GREEN
}
public Car(CarColors c) {
color=c;
}
public CarColors getColor() {
return color;
}
}
public class RacingCar extends Car {
private CarColors color;
public RacingCar(CarColors c) {
color=c;
}
public enum CarColors {
BLUE,
GREEN,
RED
}
@Override //?????
public CarColors getColor() {
return color;
}
}
Run Code Online (Sandbox Code Playgroud)
在主要:
Car racingCar = new RacingCar();
CarColors color = racingCar.getColor();
Run Code Online (Sandbox Code Playgroud) 所以我已经浏览了谷歌和SO,我找不到一个例子或解释:static final方法的目的是enum什么?
我的理解:
static可以像函数/过程语言一样访问.final意味着你无法覆盖它.无法更改参考.由于评论中指出的assylias static也不能被覆盖.enums不能被子类化,这里解释.那么static final,enum如果它永远不会被覆盖,那么s中的方法有什么意义,因为它不会有子类?
我希望能够定义一个包含另一个枚举的枚举类以及它自己的值.例如, :
public enum A {
A1, A2, A3;
}
public enum B{
B1, B2, ...(somehow define references to all values in enum A)
}
Run Code Online (Sandbox Code Playgroud)
这样枚举B中包含的任何值必须定义为initself(例如B1,B2)或枚举A的任何值.
谢谢,
我给了一个枚举ABC和一个类测试,我必须调用doSomething但我不能传递ABC枚举作为参数.
enum ABC{
A,B,C;
}
Class Test{
public void doSomething(ABC abc)
{
//some work
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想要一个enum DEF,它应该包含ABC的所有成员,并且它还应该包含枚举XYZ的成员(我想要一个应该包含两个枚举成员的枚举DEF(ABC和XYZ)).像这样的例子.
enum DEF
{
A,B,C,X,Y,Z,D;
}
enum xyz{
X,Y,Z;
}
Run Code Online (Sandbox Code Playgroud)
所以我可以调用doSomething方法,它只接受ABC枚举作为参数.我想用DEF.Example调用doSomething()方法
class Demo{
public static void main(String[] ags)
{
Test test= new Test();
test.doSomething(DEF.A);
}
}
Run Code Online (Sandbox Code Playgroud)
我比较新鲜.请向我提供任何帮助或建议.我将感谢你.
我偶然发现了以下问题,我无法从Java 1.5(java.lang包)中定义的这个类扩展和实现
public abstract class Enum<E extends Enum<E>> {...
}..
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是创建自己的枚举类型,它具有不同的序数值.我不想通过使用不同的序数名称来实现它,比如getCode()等.所以我想我可以继续扩展上面的类.
public final class XYZ extends Enum<XYZ> { //Does not work.
//
A("A", 1),
B("B", 7);
.
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以做到以下几点:
public enum NEWEnum {
A(1),
B(7);
private int code;
private NEWEnum(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
}
Run Code Online (Sandbox Code Playgroud)
我宁愿在Enum中使用通常的命令,如ordinal()和name().
我目前使用枚举定义如下:
public enum Language{
English("english", "eng", "en", "en_GB", "en_US"),
German("german", "de", "ge"),
Croatian("croatian", "hr", "cro"),
Russian("russian");
private final List<String> values;
Language(String ...values) {
this.values = Arrays.asList(values);
}
public List<String> getValues() {
return values;
}
public static Language find(String name) {
for (Language lang : Language.values()) {
if (lang.getValues().contains(name)) {
return lang;
}
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
事实是,我将不得不使用相同的方法和构造函数使用几个枚举.在我的例子中唯一改变的是枚举本身的值.
有没有办法让我创建一个我可以重用的枚举的超类?
所以我可以这样做:
public Language extends(specializedEnum){
English("english", "eng", "en", "en_GB", "en_US"),
German("german", "de", "ge"),
Croatian("croatian", "hr", "cro"),
Russian("russian");
}
Run Code Online (Sandbox Code Playgroud)
提前谢谢你!