Cách tốt nhất để sử dụng lớp này như là lớp cơ sở cho lớp Enum. Tôi muốn có thể tạo các loại bê tông khác nhau mà không cần phải mã hóa lại các phương thức getter.Enum Base Classes trong Java
public enum Tool extends Item
{
Pickaxe("Pickaxe", 101),
Saw("Saw", 201);
}
Và Tool.getNames() sẽ trả về danh sách tất cả các tên mục trong lớp Công cụ.
public enum Item
{
Default("Name", 0);
private final int id;
private final String name;
Item(String name, int id)
{
this.id = id;
this.name = name;
}
public int getId()
{
return this.id;
}
public int[] getIds()
{
Item[] items = Item.values();
int[] ids = new int[items.length];
for (int i = 0; i < items.length; i++)
{
ids[i] = items[i].getId();
}
return ids;
}
public String getName()
{
return this.name;
}
public String[] getNames()
{
Item[] items = Item.values();
String[] names = new String[items.length];
for (int i = 0; i < items.length; i++)
{
names[i] = items[i].getName();
}
return names;
}
}
Tôi biết điều này là không thể, nhưng làm cách nào tôi có thể tiếp cận tình huống này? Tôi muốn có thể truy cập vào các thành viên của mỗi lớp giống như bạn sẽ là một enum: Tool.Pickaxe.
Một gợi ý: enums không thể mở rộng lớp khác, tuy nhiên chúng vẫn có thể triển khai giao diện. – skiwi
Enums tự động mở rộng lớp 'Enum'. Họ không thể mở rộng một lớp học. Sử dụng giao diện. – MathSquared
Thực hiện một giao diện có nghĩa là tôi sẽ vẫn phải mã hóa các phương thức cho mỗi lớp con. Tôi muốn tránh điều này bằng cách nào đó. –