2016-04-04 3 views
1

Verwendung von Javers 1.4.1.javers beschwert sich, wenn ein Feld als Sammlung deklariert, aber als konkreter Typ initialisiert wird

Ich habe ein Feld in einem POJO wie folgt erklärt:

private Collection<String> names; 

und dann mit einer Instanz einer konkreten Collection Klasse wie folgt initialisiert:

names = new ArrayList<>(); 

Wenn ich Tests gegen diese Klasse laufen javes beschwert sich mit folgendem Fehler:

JaversException: MANAGED_CLASS_MAPPING_ERROR given javaClass 'class java.util.ArrayList is mapped to java.util.ArrayList, expected ManagedType

Der gleiche Fehler, wenn ich es inline, wie initialisieren:

private Collection<String> names = new ArrayList<>(); 

Auf der anderen Seite, wenn ich das Feld erklären als ein List dann Javers glücklich ist:

private List<String> names; 

I‘ m total newb zu javers, wurde es von jemand anderem in das Projekt eingeführt. Aber alles, was ich getan habe, war, dieses neue Feld zu einem bestehenden POJO hinzuzufügen. Was muss ich anschauen und/oder optimieren, um Javera glücklich zu machen?

Antwort

1

Der Grund ist, dass JaVers (statisch) wissen muss, ob es sich um eine Liste oder ein Set handelt. Ohne diese Informationen kann JaVers zwei Sammlungen nicht vergleichen. Sie müssen also Ihre POJOs ändern. für das

Diese Fehlermeldung ist ein wenig irreführend, da ein Problem hier https://github.com/javers/javers/issues/353

ist, würde ich so etwas wie High-level Collection interface is not supported, try at least Set or List

+0

erwarten, dass ein doofer ist; Ich bevorzuge es, Felder als den abstraktesten Typ zu deklarieren, der Sinn ergibt, in diesem Fall wäre das "Sammlung". Könnte diese Einschränkung von JaVers korrigiert werden? –

+0

Nein, es ist kein Fehler, so funktioniert JaVers. JaVers verwendet verschiedene Algorithmen zum Vergleichen von Sets und Listen. Wie wirst du JaVers sagen, wen du wählen sollst? –

+0

Zur Laufzeit konnte nicht über Reflektion der tatsächliche Typ bestimmt werden? –

Verwandte Themen