3 Stimmen

Umgehen der Typenlöschung in Java

Die Gruppe, mit der ich zusammenarbeite, hat also die Menge an Code, die wir für bestimmte Dinge eingeben müssen, reduziert. In diesem Fall handelt es sich um eine Spring-Webseite, die eine Liste mithilfe der DisplayTag-Bibliotheken anzeigt. Dies geschieht mit einer Klasse, die Generics verwendet und die Controller Objekt, und dann eine Unterklasse davon für jede Seite, auf der es funktionieren soll.

Dieser Controller zeigt die SystemErrorReport und definiert den Typ als den SystemErrorReportCommand .

public class SystemErrorReportController extends
    GenericSearchAndSelectController<SystemErrorReportCommand> {

Das Problem ist, dass SystemErrorReportCommand , das als Typ übergeben wird, muss in seinem Konstruktor eine manuelle Deklaration seiner selbst haben, etwa so:

public SystemErrorReportCommand()
{
    super(SystemErrorReport.class);
}

Das Befehlsobjekt wird später an etwas weitergegeben, das seinen expliziten Typ kennen muss. Ohne manuelle Angabe des Typs kommt es zurück als GenericCommand eine andere Klasse von uns, denn die SystemErrorReportCommand Bit nach der Kompilierungszeit verloren geht.

Ich bin nicht begeistert davon, denn es scheint etwas zu sein, das wir weiter automatisieren können, um Entwicklerfehler zu reduzieren. Gibt es einen eleganteren Weg, dies zu tun, oder bin ich mit diesem wegen der Art Löschung stecken?

4voto

Richard Gomes Punkte 5140

Im Gegensatz zu dem, was weithin akzeptiert wird und selten bekannt ist, kann die Typenlöschung vermieden werden, was bedeutet, dass der Aufrufende die Möglichkeit hat, zu wissen, welche generischen Parameter während des Aufrufs verwendet wurden.

Bitte sehen Sie sich das an: Verwendung von TypeTokens zum Abrufen allgemeiner Parameter

Gracias

1voto

JRL Punkte 74309

Vielleicht könnten Sie etwas verwenden wie Javassist um eine Meta-Programmierung vorzunehmen.

Es wird in Tapestry für diesen Zweck verwendet, siehe diese Artikel.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X