2016-06-15 4 views
-1

Ich arbeite an einem bereits vorhandenen Java-Programm, eine seiner Klassen berechnet einige boolesche Funktionen. Es verwendet HashMap dies für die Umsetzung, so dass das erste Argument ein String Typ ist und der zweite ist ein Predicate Typ:HashMap mit Eingabe von Prädikat-Typ in Java

featureMap = new HashMap<String, Predicate<ChunkedBinaryExtraction>> 

Die featureMap von einigen Strings und Predicate Werte manuell eingestellt wird, die definiert und zurückgeführt, indem einige private Methoden (zum Beispiel: featureMap.put("extr phrase", extrCoversPhrase());).

Ich brauche die Funktionen zuzugreifen Werte (zweites Argument), so habe ich diesen Code:

Set set = featureMap.entrySet(); 
Iterator i = set.iterator(); 
while(i.hasNext()) { 
    Map.Entry me = (Map.Entry)i.next(); 
    System.out.print(me.getKey() + ": "); 
    System.out.println(me.getValue()); 
} 

Es richtig erstes Argument extrahieren konnte aber nicht die zweiten (Funktionen Werte)! Es gibt so etwas wie diese:

extr phrase: [email protected]a7bc2 

Es scheint, dass me.getValue() zum Abrufen von Eigenschaften Werte eine richtige Aussage isnot?

+2

Parametrieren Sie Ihre 'Set' und' Map.entry' entsprechend, anstatt rohe Typen zu verwenden. – Mena

+0

@Mena hat Recht! Verwenden Sie keine rohen Typen! Check Effective Java 2nd Edition, Kapitel 5, Punkt 23: Verwenden Sie keine rohen Typen! –

Antwort

1

Dieser Ausdruck zeigt Ihnen einfach, dass der Kartenwert ein Objekt der Klasse ReVerbFeatures ist. Und diese Klasse hat die "toString()" -Methode nicht überschrieben, so dass Sie einige nicht so menschenlesbare Ausgaben erhalten.

Aber die Sache ist: Sie haben ein Objekt dieser Klasse zur Hand. So könnte man es Gießen werden

ReVerbFeatures feature = (ReVerbFeatures) me.getValue(); 

dann dieser Klasse eine der Methoden aufrufen, zum Beispiel.

Und wie andere gesagt haben: lesen Sie über "Rohtypen", und wenn möglich, ändern Sie diesen Code entsprechend.

Endlich: Wenn Sie mit Code umgehen müssen ... dann gibt es keine andere Möglichkeit, als über alle beteiligten Konzepte zu lernen. Du solltest dich nicht mit Dingen beschäftigen, die du nicht verstehst. Bedeutung: Sie sollten entscheiden, ob Sie die Zeit haben, wirklich über all diese Dinge zu lernen; oder hör auf zu tun, was du gerade machst. Vermeide es, für etwas verantwortlich zu sein ... wenn dir die Fähigkeiten fehlen, um wirklich verantwortlich zu sein.

+0

Danke, du hast Recht. Ich habe deine Lösung angewendet, aber es zeigt Folgendes: edu.washington.cs.knowitall.extractor.conf.ReVerbFeatures $ 13 kann nicht in edu.washington.cs.knowitall.extractor.conf.ReVerbFeatures umgewandelt werden. – BlueGirl

+0

Ah, richtig. Die $ -Nummer gibt eine innere Klasse an. Also müssen Sie vielleicht Ihre Frage überarbeiten ... um uns zu sagen, was Sie eigentlich mit diesen Werten machen wollen. – GhostCat

+0

: (Gibt es keine Möglichkeit, diese Features abzurufen? Für einen bestimmten Satz betrachtet es einige Features und berechnet sie als boolesche Features (true oder false). Jede private Methode legt einen Wert für eines der Features fest, ich brauche a Vektor dieser Merkmale (zum Beispiel (0, 1, 0, ..)). – BlueGirl