Bagi mereka yang terpikat di sini dengan judul: ya, Anda dapat menentukan metode Anda sendiri di enum Anda. Jika Anda bertanya-tanya bagaimana cara memanggil metode non-statis tersebut, Anda melakukannya dengan cara yang sama seperti dengan metode non-statis lainnya - Anda memanggilnya pada contoh tipe yang mendefinisikan atau mewarisi metode itu. Dalam kasus enum contoh seperti itu hanya ENUM_CONSTANT
s.
Jadi yang Anda butuhkan hanyalah EnumType.ENUM_CONSTANT.methodName(arguments)
.
Sekarang mari kita kembali ke masalah dari pertanyaan. Salah satu solusinya bisa jadi
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;
}
}
Sekarang Direction.NORTH.getOppositeDirection()
akan kembali Direction.SOUTH
.
Berikut adalah cara yang lebih "hacky" untuk mengilustrasikan komentar @jedwards tetapi tidak terasa sefleksibel pendekatan pertama karena menambahkan lebih banyak bidang atau mengubah urutannya akan merusak kode kita.
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];
}
}