Java - Yeni Entry (anahtar, değer) nasıl oluşturulur

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.Entryyi ö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. İ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 birAbstractMap' örneğine ihtiyacınız olmadığı anlamına gelir, bu nedenle bunun gibi bir şey iyi derlenir:

Map.Entry entry =
    new AbstractMap.SimpleEntry("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.Entrynin kendisini kullanamıyorum çünkü görünüşe göre bu salt okunur bir nesne ve yeni instanceof örnekleyemiyorum

Bu tam olarak doğru değil. Bunu doğrudan (yani new ile) örnekleyememenizin nedeni, bunun bir interface Map.Entry olmasıdır.


Uyarı ve ipucu

Belgelerde belirtildiği gibi, AbstractMap.SimpleEntry @since 1.6dır, bu nedenle 5.0'a takılıp kaldıysanız, o zaman sizin için mevcut değildir.

Map.Entryyiuygulayan` 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

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.

Yorumlar (7)
Çözüm

Sadece Map.Entry arayüzünü kendiniz uygulayabilirsiniz:

import java.util.Map;

final class MyEntry implements Map.Entry {
    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 entry = new MyEntry("Hello", 123);
System.out.println(entry.getKey());
System.out.println(entry.getValue());
Yorumlar (5)

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.SimpleEntrynin aksine).

Yorumlar (0)