Ben Util.Map.Entry
yapısına benzer şekilde key
, value
yapısını içeren yeni bir öğe oluşturmak istiyorum.
Sorun şu ki, bir Map.Entry
yi örnekleyemiyorum çünkü bu bir arayüz.
Map.Entry için yeni bir genel anahtar/değer nesnesinin nasıl oluşturulacağını bilen var mı?
Orada's public static class AbstractMap.SimpleEntry<K,V>
. İsminin Abstract
kısmının sizi yanıltmasına izin vermeyin: aslında bir abstract
sınıfı değildir (ancak üst düzey AbstractMap
öyledir).
İç içe geçmiş statik' bir sınıf olması, onu örneklemek için çevreleyen bir
AbstractMap' örneğine ihtiyacınız olmadığı anlamına gelir, bu nedenle bunun gibi bir şey iyi derlenir:
Map.Entry<String,Integer> entry =
new AbstractMap.SimpleEntry<String, Integer>("exmpleString", 42);
Başka bir yanıtta belirtildiği gibi, Guava'da kullanabileceğiniz kullanışlı bir static
fabrika yöntemi Maps.immutableEntry
de vardır.
Sen söyledin:
Map.Entry
nin kendisini kullanamıyorum çünkü görünüşe göre bu salt okunur bir nesne ve yeniinstanceof
örnekleyemiyorum
Bu tam olarak doğru değil. Bunu doğrudan (yani new
ile) örnekleyememenizin nedeni, bunun bir interface Map.Entry
olmasıdır.
Belgelerde belirtildiği gibi, AbstractMap.SimpleEntry
@since 1.6
dır, bu nedenle 5.0'a takılıp kaldıysanız, o zaman sizin için mevcut değildir.
Map.Entryyi
uygulayan` bilinen başka bir sınıf aramak için, aslında doğrudan javadoc'a gidebilirsiniz. Java 6 sürümünden](http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html)
Arayüz Map.Entry<K,V>
Bilinen Tüm Uygulayıcı Sınıflar:
Ne yazık ki 1.5 sürümü kullanabileceğiniz bilinen herhangi bir uygulama sınıfını listelemiyor, bu nedenle kendi sınıfınızı uygulamak zorunda kalabilirsiniz.
Sadece Map.Entry<K, V>
arayüzünü kendiniz uygulayabilirsiniz:
import java.util.Map;
final class MyEntry<K, V> implements Map.Entry<K, V> {
private final K key;
private V value;
public MyEntry(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue(V value) {
V old = this.value;
this.value = value;
return old;
}
}
Sonra da kullan:
Map.Entry<String, Object> entry = new MyEntry<String, Object>("Hello", 123);
System.out.println(entry.getKey());
System.out.println(entry.getValue());
Maps.immutableEntry](http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Maps.html#immutableEntry(K,%20V)) from Guava adresini deneyin
Bu, Java 5 ile uyumlu olma avantajına sahiptir (Java 6 gerektiren AbstractMap.SimpleEntry
nin aksine).