Reputation: 1658
I have some enums, which has getDescription()
method:
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;
}
}
Is it possible to create some abstract enum or some interface, that it could be write something like this?
public void outputDescriptions(AbstractEnumType abstractEnumType) {
for(Enum enum: abstractEnumType.values()) {
System.out.println(enum.getDescription());
}
}
And output for outputDescriptions(Test)
qwe
asd
zxc
Upvotes: 3
Views: 3668
Reputation: 250
First, define interface with desired method
interface DescriptionableEnum {
String getDescription();
}
Next, add to all your enums implementation of this interafce:
enum Test implements DescriptionableEnum {...}
enum Test1 implements DescriptionableEnum {...}
And this function will help you:
public static void outputDescriptions(Class<? extends DescriptionableEnum> abstractEnumType) {
if (abstractEnumType.isEnum()) {
DescriptionableEnum[] values = abstractEnumType.getEnumConstants();
for (DescriptionableEnum value : values) {
System.out.println(value.getDescription());
}
}
}
Main method for testing:
public static void main(String[] args) {
outputDescriptions(Test.class);
outputDescriptions(Test1.class);
}
Upvotes: 2
Reputation: 32980
You cannot derive enums from an abstract base class but enums can implement interfaces. The following would be a solution to your problem:
You create an interface Descriptable
public interface Descriptable {
public String getDescription();
}
and let all your enums implement this interface:
public enum Test implements Descriptable {
and then write the output function like this:
public <T extends Enum<T> & Descriptable> void outputDescriptions(Class<T> tclass) {
for(T t: tclass.getEnumConstants())
System.out.println(t.getDescription());
}
Upvotes: 4
Reputation: 2073
No, we can't have abstract enums, all enum types extend Enum, and they're final by default. Since Java does not support multiple inheritance, an enum cannot extend anything else.
However an enum can implement Interface
.
Upvotes: 0
Reputation: 31290
Enums can implement interfaces:
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;
}
}
Upvotes: 2