Burada başlığa göre cezbedilenler için: evet, numaranızda kendi yöntemlerinizi tanımlayabilirsiniz. Bu tür statik olmayan yöntemi nasıl çağıracağınızı merak ediyorsanız, bunu diğer statik olmayan yöntemlerle aynı şekilde yaparsınız - bu yöntemi tanımlayan veya miras alan tip örneğinde çağırırsınız. Numaralandırma durumunda, bu tür örnekler basitçe ENUM_CONSTANT
s'dir.
Yani tek ihtiyacınız olan şey EnumType.ENUM_CONSTANT.methodName(arguments)
.
Şimdi sorudan soruna geri dönelim. Çözümlerden biri olabilir
public enum Direction {
NORTH, SOUTH, EAST, WEST;
private Direction opposite;
static {
NORTH.opposite = SOUTH;
SOUTH.opposite = NORTH;
EAST.opposite = WEST;
WEST.opposite = EAST;
}
public Direction getOppositeDirection() {
return opposite;
}
}
Şimdi Direction.NORTH.getOppositeDirection()
dönecek Direction.SOUTH
.
Burada @jedwards yorumunu göstermenin biraz daha "hacky" yolu var, ancak daha fazla alan eklemek veya bunların sırasını değiştirmek kodumuzu bozacağından ilk yaklaşım kadar esnek gelmiyor.
public enum Direction {
NORTH, EAST, SOUTH, WEST;
// cached values to avoid recreating such array each time method is called
private static final Direction[] VALUES = values();
public Direction getOppositeDirection() {
return VALUES[(ordinal() + 2) % 4];
}
}