2016-08-05 124 views
7

Anahtarının herhangi bir sırasına sahip olabileceğini nasıl Haritalandırabilirim?Java: Anahtar olarak herhangi bir enum ile eşleştirin

Mesela ben iki enum MEYVE VE SEBZE var.

nasıl anahtar hem meyve ve sebze, ancak yalnızca numaralandırma olabilir harita ilan edebilir, Nesne değil?

Ben, Sen iki tip örneği anahtarı olabilir bir harita ilan etmek isterseniz iki çeteleler için ortak bir süper tıp olması gerekir

Map<???, String> myMap... 

cevap

18
  1. Sen anahtar olarak java.lang.Enum kullanabilirsiniz.

    enum Fruit { 
        Apple 
    } 
    
    Map<java.lang.Enum<?>, String> mp = new HashMap<>(); 
    mp.put(Fruit.Apple, "myapple"); 
    
  2. Enumlarınızda uygulanacak arabirim oluşturun. Bu yöntem size daha fazla kontrol sağlar.

    interface MyEnum{} 
    
    enum Fruit implements MyEnum { 
        Apple 
    } 
    
    Map<MyEnum, String> mp = new HashMap<>(); 
    mp.put(Fruit.Apple, "myapple"); 
    
+0

Ben anahtarları olarak enum ile haritalar için optimize edildiğinden, bir HashMap yerine bir EnumMap kullanmayı öneririm. –

8

gibi bir şey yani. Bir haritanın yalnızca bir anahtar türü olabilir, ancak iki alt türden bir türünüz varsa, o zaman bu tamam.

Sen çeteleler için üst sınıfı (her zaman java.lang.Enum var) değiştiremezsiniz, ancak bunları arabirimleri uygulamak yapabilirsiniz. Yani ne yapabiliriz şudur:

interface FruitOrVegetable { 
} 

enum Fruit implements FruitOrVegetable { 
} 

enum Vegetable implements FruitOrVegetable { 
} 

class MyClass { 
    Map<FruitOrVegetable, String> myMap; 
} 

soru şudur: Eğer arayüzde içerebilir çeteleler Meyve ve Sebze paylaşılan davranış budur. Davranışsız bir arayüz oldukça anlamsızdır. Sürekli instanceof kontrolleri yapmak gerekir ve Fruit veya Vegetable bir şekilde bir şeyler tedavi etmek atmalarını istiyorum.

Belki sizin durumda, gerçekte tek bir enum FruitOrVegetable ihtiyaç - Eğer birbirinin onları tedavi edebilmek istiyorum.