Ich hatte einen Interviewtest und habe den folgenden Code gesehen:
BEARBEITEN:
%Vor%Ich hatte Java noch nie so gesehen wie
%Vor%Der Test besteht darin, die Value-Klasse mit dem oben angegebenen Einheitstestcode zu implementieren.
Ich habe versucht, die folgende Signatur der Value-Methode herauszufinden (muss implementiert werden):
%Vor%Weiß jemand, bitte helfen?
Danke
EDIT: Sollte laut Antworten unter @marlon so sein.
%Vor%Die Schlüsselsyntax zu wissen:
%Vor%ist die Methode zum Aufrufen der statischen Methode einer Klasse mit parametrisiertem Argument.
EDIT: nach @ snipes83, Syntax, um nicht-statische Methode einer Klasse mit parametrisierten Argument aufzurufen.
%Vor% Value.<SomeValue>
So werden Generika für Methoden dargestellt.
Verwenden Sie Google Guavas Optional
als Beispiel:
Siehe Generische Typen - Generische Methoden aufrufen
Da Interfaces keine statischen Methoden deklarieren können (schade dir Java), deklariere einfach deine Methode als statisch und vergiss die Schnittstelle wie folgt:
%Vor% Sehen Sie sich die Klasse Test
mit der Methode getEmptyList
unten an:
Es wird ein leeres List
zurückgegeben, das Objekte vom Typ T
enthält.
Wenn Sie Test
wie folgt verwenden
Dann kann der Typ-Inferenzmechanismus auf den Typparameter basierend auf dem Variablentyp schließen.
Wenn Sie jedoch den Rückgabewert von getEmptyList
innerhalb eines Methodenaufrufausdrucks wie im folgenden Beispiel verwenden möchten, in dem die Methode printList
ein einzelnes Argument vom Typ List<Integer>
erwartet, dann kann der Typ nicht verwendet werden irgendein variabler Typ.
In diesem Fall müssen Sie den Typ wie folgt angeben:
%Vor%1) So werden generische Methoden aufgerufen. Verweisen & gt; & gt; Ссылка
2) <SomeValue>
in Value.<SomeValue>
ist optional . Der Compiler kann den Typ ableiten. Dies wird TypeInference genannt. Verweisen & gt; & gt; Ссылка
Antwort aktualisiert:
3) Value.<SomeValue> createEmptyValue()
hat Recht und Value.<SomeValue>createEmptyValue()
hat auch Recht. Beide Wege sind legal. Habe es gerade getestet. Habe es vorher nicht bemerkt.
Obwohl Value
offensichtlich selbst eingegeben wurde (basierend auf dem Instanzvariablentyp Value<SomeValue>
), wird auch die statische Methode createEmptyValue()
getippt.
Eine vernünftige Annahme, wenn Namenskonventionen eingehalten wurden, ist, dass SomeValue
Value
erweitert (oder implementiert).
Obwohl es keine richtige Antwort gibt, ist eine wahrscheinliche Möglichkeit für die Signatur von Value
: