Java Generics Value.SomeValue

8

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%     
Eric 05.06.2013, 01:25
quelle

4 Antworten

6

Value.<SomeValue> So werden Generika für Methoden dargestellt.

Verwenden Sie Google Guavas Optional als Beispiel:

%Vor%

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%     
Marlon Bernardes 05.06.2013 01:46
quelle
3

Sehen Sie sich die Klasse Test mit der Methode getEmptyList unten an:

%Vor%

Es wird ein leeres List zurückgegeben, das Objekte vom Typ T enthält.

Wenn Sie Test wie folgt verwenden

%Vor%

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.

%Vor%

In diesem Fall müssen Sie den Typ wie folgt angeben:

%Vor%     
Snps 05.06.2013 02:41
quelle
2

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.

    
Ravi Trivedi 05.06.2013 02:16
quelle
1

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 :

%Vor%     
Bohemian 05.06.2013 06:03
quelle

Tags und Links