2012-03-26 7 views
0
Navigieren

Für jedermann vertraut mit lambdaj (nicht ich) Sie dieses Stacktrace gesehen haben, oder eine Variante vor:Lambdaj Mit

ch.lambdaj.function.argument.ArgumentConversionException: Kann nicht wandeln den Platzhalter org.dom4j.tree.AbstractAttribute in einem gültigen Argument bei ch.lambdaj.function.argument.ArgumentsFactory.actualArgument (ArgumentsFactory.java:92) bei ch.lambdaj.function.matcher.HasArgumentWithValue.havingValue (HasArgumentWithValue.java:70) bei ch.lambdaj.Lambda.having (Lambda.java:1204)

Mein Verständnis ist, dass dies durch eine Begrenzung von Lambdaj mit letzten Klassen geschieht.

erhalte ich die oben, wenn Sie den folgenden Code zu testen:

import static ch.lambdaj.Lambda.having; 
import static ch.lambdaj.Lambda.selectFirst; 
import static org.hamcrest.CoreMatchers.equalTo; 

import java.util.List; 

import org.dom4j.tree.AbstractAttribute; 
public class DocumentUtils { 

    public static String getAttributeValueFromListByName(
      List<AbstractAttribute> list, String name) { 

     AbstractAttribute requiredAttribute = selectFirst(list, 
       having((AbstractAttribute.class).getName(), equalTo(name))); 

     String value = requiredAttribute.getValue(); 

     return value; 

    } 

} 

I dom4j der Attribut-Schnittstelle hatte, das gleiche Problem bekommen, dann dachte, vielleicht .. lambdaj nicht Schnittstellen wie so wechselte ich zu den AbstrakteAttribute-abstrakte Klasse.

Gibt es ein Problem mit Lambdaj und abstrakten Klassen? Oder ist meine Methode nur Hosen? Irgendwelche Ideen, wie man das löst?

FYI: Ich verwende lambdaj 2.4 und 1.6 dom4j

Vielen Dank im Voraus.

+0

Nur klar zu sein; Ich bin nur daran interessiert, ob dies in Lambdaj implementiert werden kann oder nicht. Wenn ich sage "Irgendwelche Ideen, wie man das löst?", Meine ich "löse" mit lambdaj. Vielen Dank! (Ich frage mich auch, ob Kommentar gwill meinen Beitrag stoßen werde, habe ich diese Frage erstellt letzte Nacht * Schlagzeug Finger *) – HellishHeat

Antwort

0

Ausgabe 92 wurde mit lambdaj angehoben, wie von Mario Fusco (LambdaJ Developer) angefordert

0

Wenn Sie lambdaj 2.4 verwenden, haben Sie Glück, denn dieses Problem wurde in dieser Version behoben. Das Problem und seine Lösung wird in dem ersten Punkt der release notes von Lambdaj 2.4 beschrieben.

Insbesondere verwendet Lambdaj eine interne Heuristik, um Arguments Platzhalter zu erstellen, aber es funktioniert in einigen Fällen nicht, so dass Sie es überschreiben können, wie dort erklärt.

+0

Vielen Dank Mario, ich nehme es, aus Ihrer Antwort, dass die ArgumentConversionException, die ich bekomme, bezieht sich nicht auf meine AbstractAttribute , aber zum String .getName()? Also kann ich eine Variation der in "Punkt 1" in den Versionshinweisen beschriebenen Lösung verwenden, um mein Problem zu sortieren? – HellishHeat

+0

Nein, das ist nicht der Punkt. Wie auch immer, ich vergesse, was ich vorher geschrieben habe: es ist nur für den Abschlussunterricht gedacht und das ist nicht dein Fall. In der Tat sollte lambdaj immer in der Lage sein, Argument-Platzhalter für abstrakte Klassen und sicher für Schnittstellen zu erstellen, da in diesem letzten Fall der native Java-Proxy-Mechanismus verwendet werden kann. Ich fürchte, Sie haben einen Lambdaj-Virus gefunden. Könnten Sie bitte ein Problem bei der Lambdaj-Problemverfolgung öffnen, indem Sie Ihren fehlgeschlagenen Testfall anhängen. Verwenden Sie nach Möglichkeit die Schnittstelle anstelle der abstrakten Klasse. Danke –

+0

Sicher, ich werde heute Abend ein Problem erstellen. Danke, dass du das geklärt hast. – HellishHeat