2016-08-08 34 views
1

Ich habe folgendes Setup:Ungeprüfter Guss Warnung, wenn Rückkehr generische Implementierung basierend auf der Klasse <> Argument

@Override 
public <T> Optional<EndpointProvider<T>> getProvider(Class<T> providedClass) { 
    if(providedClass.isAssignableFrom(RecommendationCategory.class)){ 
     return Optional.of((EndpointProvider<T>) new RecommendationCategoryProvider()); 
    } 
    return Optional.empty(); 
} 

private class RecommendationCategoryProvider implements EndpointProvider<RecommendationCategory> { 

Und die Compiler mir eine ungeprüfte Guss Warnung gibt. Ich würde denken, dass die Überprüfung von bereitgestelltenClass.isAssignableFrom (RecommendationCategory.class) eine ungeprüfte Cast-Warnung verhindern würde.

Gibt es eine Möglichkeit, diese Warnung in diesem Setup nicht zu haben?

+3

Manchmal wirft der Compiler eine Warnung, in der Sie nur besser wissen. In einer perfekten Welt wäre es nicht, aber es ist nichts, um den Kopf (oder die Entwicklungszeit) zu verlieren. In diesem Fall glaube ich, dass Sie sicher sein müssen, dass Sie den Komponententyp gegen die Basisklasse überprüfen. Wenn du das schon toll machst, bist du in diesem Fall schlauer als der Compiler. – Rogue

+1

Sie können [@SuppressWarnings ("unchecked")] (https://docs.oracle.com/javase/8/docs/api/java/lang/SuppressWarnings.html) verwenden, um dem Compiler mitzuteilen, die Warnung zu ignorieren. – McDowell

Antwort

1

Dies ist der einzige Weg, wie ich dazu kommen könnte. Es werden keine Warnungen angezeigt.

public static <T> EndpointProvider<T> getProvider(Class<T> klass) 
{ 
    if (klass.isAssignableFrom(RecommendationCategory.class)) 
    { 
     return new EndpointWrapper<T>(klass.cast(new RecommendationCategory())); 
    } 

    return null; 
} 

private static class EndpointWrapper<X> implements EndpointProvider<X> 
{ 
    public EndpointWrapper(X wrapper) 
    { 

    } 
} 

private static class RecommendationCategory 
{ 

} 

private static interface EndpointProvider<T> 
{ 

} 
+0

Bitte beachten Sie, dass ich es auf EndpointProvider und nicht auf RecommendationCategory selbst umsetzen müsste. Also kann ich das nicht tun. –

+0

Bearbeitet die Antwort - Es gibt keine Möglichkeit, Generics zur Laufzeit sicher zu überprüfen. –

+0

Hallo vielen Dank für die Bearbeitung, aber es ist immer noch nicht für diesen Fall anwendbar. Ich muss das isAssignableFrom überprüfen, denn wenn es nicht zuweisbar ist, muss ich Optional.empty zurückgeben. Und im Produktionscode gibt es eine Reihe weiterer if else-Anweisungen für Anbieter für andere Klassen. –