Datentypen Problem mit Generics und null

Lehtis

Mitglied
Hallo java-forum.org Community,
ich habe ein Problem.

Und zwar bei folgenden Beispiel:

In der Klasse folgende Methode:
[JAVA=187]
/**
* Methode: lookupLast<br>
* Sucht das letzte Vorkommen mit passendem Schluessel und gibt den Wert
* zurueck<br>
* Ist der Schluessel nicht vorhanden, soll null zurueckgeliefert werden
*
* @param key
* @return Letzter passender Wert zu uebergebenem Schluessel
*/
public V lookupLast(K key) {
Entry buffer = null;
Integer y = (Integer) key;
Integer x;
for(Entry n : this.Liste) {
x = (Integer) n.getKey();
if(x.intValue() == y.intValue()) {
buffer = n;
}
}
if(buffer!=null) {
return (V) buffer.getValue();
}
return null;
}[/code]

In der Test Klasse folgender Abschnitt den man nicht ändern darf!
[JAVA=179] @Test
public void testlokupLast(){
Dictionary<Integer,String> d = new Dictionary<Integer,String>(true);

assertTrue(d.add(new Entry<Integer,String>(12,"zwölf")));
assertTrue(d.add(new Entry<Integer,String>(null,"null")));
assertTrue(d.add(new Entry<Integer,String>(12,"rofl")));

assertEquals("rofl", d.lookupLast(new Integer(12)));
assertEquals("null", d.lookupLast(null));
}[/code]

Mein Problem ist nun das er immer mit einer NullPointerException fliegt.
Das Problem ist das er anscheinend probleme mit dem null hat.
Gibt es da eine Lösung? Wenn ihr noch mehr Code braucht sagt bescheid.^^
 
Zuletzt bearbeitet:
Die Klasse Entry:
Java:
public class Entry <K extends Comparable<K>,V> implements Comparable<Entry<K,V>> {

    

	/**
	 * Datenfelder, alle nicht direkt von aussen zugreifbar.<br>
	 * Es werden mindestens Datenfelder fuer Schluessel und Wert benoetigt.
	 */
	private K Key;
        private V Value;

	/**
	 * default-Konstruktor<br />
	 * <br />
	 * Schluessel und Wert sind mit "null" zu initalisieren.
	 * 
	 */
	public Entry() {
            this.Key = null;
            this.Value = null;
        }

	/**
	 * Konstruktor
	 * 
	 * @param key der Schluessel
	 * @param value der Wert des Schluessels
	 */
	public Entry(K Key, V Value) {
            this.Key = Key;
            this.Value = Value;
        }

    

	/**
	 * Methode: getKey
	 * 
	 * @return liefert den Schluessel des Eintrags
	 */
	public K getKey() {
            return Key;
        }

    

	/**
	 * Methode: getValue
	 * 
	 * @return liefert den Wert des Eintrags
	 */
	public V getValue() {
            return Value;
        }

	/**
	 * Methode: setKey() <br/>
	 * Setzen des Schluessels
	 * 
	 * @param key
	 */
	public void setKey(K Key) {
            this.Key = Key;
        }

	/**
	 * Methode: setValue<br/>
	 * Setzen des Wertes
	 * 
	 * @param value
	 */
	public void setValue(V Value) {
            this.Value = Value;
        }

	/**
	 * Methode: compareTo()<br>
	 * Vergleicht zwei Eintraege, zwei Eintraege werden nur ueber den Schluessel
	 * verglichen, der Wert des Eintrags braucht fuer den Vergleich nicht
	 * beruecksichtigt zu werden. Wirft eine NullPointerException, wenn einer der 
         * zu vergeleichenden Schluessel null ist
	 * 
	 * @see java.lang.Comparable<T>.compareTo
	 * @param e der zu vergleichende Eintrag
	 * @return Ergebnis des Vergleiches
         * @throws NullPointerException
	 */
	@Override
        public int compareTo(Entry<K, V> e) throws NullPointerException {
            return this.Key.compareTo(e.Key);
    }
	/**
	 * Methode: equals<br/>
	 * Vergleicht, ob zwei Eintraege gleich sind. Dies ist der Fall, wenn der
	 * Schluessel und der Wert identisch sind.
	 * 
	 * @see java.lang.Object.equals
	 * @param o
	 * @return true wenn Schluessel und Wert indentisch ist, ansonsten false
	 */
        @Override
        public boolean equals(Object obj) {
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            final Entry<K, V> other = (Entry<K, V>) obj;
            if (this.Key != other.Key && (this.Key == null || !this.Key.equals(other.Key))) {
                return false;
            }
            if (this.Value != other.Value && (this.Value == null || !this.Value.equals(other.Value))) {
                return false;
            }
            return true;
        }
        
        @Override
        public int hashCode() {
            int hash = 3;
            hash = 89 * hash + (this.Key != null ? this.Key.hashCode() : 0);
            hash = 89 * hash + (this.Value != null ? this.Value.hashCode() : 0);
            return hash;
        }
        
        
	/**
	 * Methode: toString<br/>
	 * Stringrepraesentation eines Eintrags: Schluessel und Wert sind durch
	 * einen Pfeil "->" (ohne Leerzeichen oder sonstiges) zu trennen, z.B:
	 * schluessel1->wert1
	 * 
	 * @see java.lang.Object.toString
	 * @return Stringrepraesentation eines Eintrags
	 */
	 @Override
        public String toString() {
            return this.Key + "->" + this.Value;
        }
}

Das kommt beim Testen herraus:
attachment.php
 
Zuletzt bearbeitet:
Java:
assertEquals("null", d.lookupLast(null));
da wird null übergeben.
In der Methode castest du das dann auf Integer und willst darauf getIntValue() aufrufen, da krachts dann natürlich. Überleg dir also was deine Methode bei Übergabe von null machen soll.
 

Neue Themen


Zurück
Oben