我有一些枚举,其中有getDescription()
方法:
public enum Test {
QWE ("qwe"),
ASD ("asd"),
ZXC ("zxc");
private final String description;
Test(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
public enum Test1 {
RTY("rty");
private final String description;
Test1(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
是否可以创建一些抽象枚举或某些接口,它可以写成这样的东西?
public void outputDescriptions(AbstractEnumType abstractEnumType) {
for(Enum enum: abstractEnumType.values()) {
System.out.println(enum.getDescription());
}
}
outputDescriptions(Test)
qwe
asd
zxc
答案 0 :(得分:4)
您无法从抽象基类派生枚举,但枚举可以实现接口。以下是您的问题的解决方案:
您创建了一个界面<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="test.php" method="post" enctype="multipart/form-data" id="test-form" novalidate>
<input name="table[]" type="checkbox" value="university" id="university"/>
University<br>
<input type="checkbox" disabled="true" class="uni" value="1" />
A<br>
<input type="checkbox" disabled="true" class="uni" value="2" />
B<br>
<input type="checkbox" disabled="true" class="uni" value="3" />
C<br>
<input type="checkbox" disabled="true" class="uni" value="3" />
D<br>
<input name="table[]" type="checkbox" value="buildings" />
Buildings<br>
<input name="table[]" type="checkbox" value="offices" />
Offices<br>
<input name="table[]" type="checkbox" value="halls" />
Halls<br>
<input name="table[]" type="checkbox" value="labs" />
Labs<br>
<input name="table[]" type="checkbox" value="studios" />
Studios<br>
<input name="table[]" type="checkbox" value="machines" />
Machines<br>
<input name="table[]" type="checkbox" value="facilities" />
Facilities<br>
</form>
Descriptable
让所有枚举实现此接口:
public interface Descriptable {
public String getDescription();
}
然后像这样写输出函数:
public enum Test implements Descriptable {
答案 1 :(得分:3)
枚举可以实现接口:
interface Descr {
String getDescription();
}
enum Test implements Descr {
QWE ("qwe"),
ASD ("asd"),
ZXC ("zxc");
private final String description;
Test(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
答案 2 :(得分:3)
首先,使用所需方法定义界面
interface DescriptionableEnum {
String getDescription();
}
接下来,添加到此interfce的所有枚举实现:
enum Test implements DescriptionableEnum {...}
enum Test1 implements DescriptionableEnum {...}
此功能可以帮助您:
public static void outputDescriptions(Class<? extends DescriptionableEnum> abstractEnumType) {
if (abstractEnumType.isEnum()) {
DescriptionableEnum[] values = abstractEnumType.getEnumConstants();
for (DescriptionableEnum value : values) {
System.out.println(value.getDescription());
}
}
}
主要测试方法:
public static void main(String[] args) {
outputDescriptions(Test.class);
outputDescriptions(Test1.class);
}
答案 3 :(得分:0)
不,我们不能使用抽象枚举,所有枚举类型都会扩展枚举,并且默认情况下它们是最终的。由于Java不支持多重继承,因此枚举不能扩展其他任何内容。
然而,枚举可以实现Interface
。