Giriş
Şu satırı dahil ederiz.
Enum'daki tüm alanlar büyük harf olmalı. Aslında bu yazıdaki birçok örnek yanlış isimlendirme kullanıyor :) Kullanılan regex şöyle
Açıklaması şöyle
Constructor eğer varsa private kabul edilir. Açıklaması şöyle
Şöyle yaparız. Burada koda private yazılmış ancak yazılmasa da olurdu.
Örnek ver
ordinal metodu
Örnek ver
valueOf metodu
Herhangi bir Enum'a isim ile erişmek için şöyle yaparız.
Açıklaması şöyle
Şu satırı dahil ederiz.
import java.lang.Enum;
Naming ConventionEnum'daki tüm alanlar büyük harf olmalı. Aslında bu yazıdaki birçok örnek yanlış isimlendirme kullanıyor :) Kullanılan regex şöyle
^[A-Z][A-Z0-9](_[A-Z0-9]+)$
ÖrnekAçıklaması şöyle
Which basically means, only use upper case characters, numbers and underscores (in the order which is valid Java syntax). So instead of StreetOwner, use STREET_OWNER. RegisteredBy should be REGISTERED_BY and so forth.Şu kod yanlış.
public enum StreetNameEnum {
StreetOwner("0"), StreetedBy("1"), StreetedFor("2"), RegisteredBy("3");
private String code;
StreetRoleEnum(String code) {
}
...
}
constructorConstructor eğer varsa private kabul edilir. Açıklaması şöyle
ÖrnekIn an enum declaration, a constructor declaration with no access modifiers is private.
Şöyle yaparız. Burada koda private yazılmış ancak yazılmasa da olurdu.
public enum TargetingName {
CONTENT("Content", "Content Targeting"),
TECHNOLOGY("Technology", "Technology Targeting");
private TargetingName(String textToSelect, String textDisplayed) {
this.textToSelect = textToSelect;
this.textDisplayed = textDisplayed;
}
private String textToSelect;
private String textDisplayed;
public String getTextDisplayed() {
return textDisplayed;
}
public String getTextToSelect() {
return textToSelect;
}
}
name metoduÖrnek ver
ordinal metodu
Örnek ver
valueOf metodu
Herhangi bir Enum'a isim ile erişmek için şöyle yaparız.
static <E extends Enum<E>> E getEnumByName(Class<E> enumClass, String name) {
return Enum.valueOf(enumClass, name);
}
values metodu - KullanmayınAçıklaması şöyle
Problem with Enum.values() is that it has to be an immutable list by specification. In order to achieve this it returns a new array instance with the enum values every time it is called.
Görmek için şöyle yaparız
public enum Fruits {APPLE, PEAR, ORANGE, BANANA;public static void main(String[] args) {System.out.println(Fruits.values());System.out.println(Fruits.values());}}// output// [Lcom.test.Fruits;@7ad041f3// [Lcom.test.Fruits;@251a69d7
Örnek
Elimizde şöyle bir kod olsun.
Elimizde şöyle bir kod olsun.
public enum Colour
{
ROOD, GEEL, GROEN, BLAUW, PAARS;
}
Şöyle yaparız.List<Colour> colourList = Arrays.asList(Colour.values());
Collections.shuffle(colourList);
toString metodu
Bunu 3 şekilde yapabiliriz.
1. Tek bir toString() ile
Şöyle yaparız
@Override
public String toString() {
switch (this) {
case GAME_BOY:
return "Game boy";
case MACBOOK:
return "Macbook Pro";
...
}
}
2. constructor parametresi ile
Şöyle yaparız
public enum Other {
GAME_BOY("Game Boy"), MACBOOK("Macbook Pro"), IPHONE("iPhone XS"), LAPTOP("Laptop");
private final String product;
private Other(String passed) {
this.product = passed;
}
@Override
public String toString() {
return product;
}
}
3. Her enum Değeri İçin toString() İle
Şöyle yaparız
public enum Other {
GAME_BOY {
@Override public String toString() { return "Game Boy"; }
},
MACBOOK { ... },
...
}
Diğer
1. Kalıtım
1. Kalıtım
Enum sınıfı kalıtım yapabilir. Şöyle yaparız.
interface A {}
enum C implements A {
ITEM_A,
ITEM_B,
}
Kaltımda enum alanı da arayüze uymak zorundadır. Elimizde şöyle bir kod olsun. Bu kod derlenmez. Çünkü DoorFactory.EXTERIOR yine IDoorFactory cinsindendir. Dolayısıyla getDoor() metodu Door tipnden nesne döner. Bunu da ExteriorDoor'a atamak mümkün değil.public static class Door { }
public static class ExteriorDoor extends Door { }
public interface IDoorFactory {
public Door getDoor();
}
public enum DoorFactory implements IDoorFactory
{
EXTERIOR {
@Override
public ExteriorDoor getDoor() {
//valid covariant method override
return new ExteriorDoor();
}
},
INTERIOR {
@Override
public Door getDoor() {
return new Door();
}
}
}
public static void main(String[] args)
{
//invalid, method only returns a Door
ExteriorDoor door = DoorFactory.EXTERIOR.getDoor();
}
Hiç yorum yok:
Yorum Gönder