2017-09-29 6 views
0

Je voudrais utiliser une méthode pour deux types et j'ai essayé comme ceci:Comment utiliser le paramètre de fonction générique

private <T extends Base> boolean isNeeded(String name, T receivedItem) { 
    Base item = null; 
    if (receivedRequest.getClass().equals(Derived1.class)) { 
     item = (Derived1) receivedItem; 
    } else if (request.getClass().equals(Derived2.class)) { 
     item = (Derived2) receivedItem; 
    } 
    callMethodDoSomething(item.getData().getSpecificData()); 
} 

Mais je ne sais pas comment appeler une méthode qui est seulement dans les classes dérivées. Quelle est la meilleure et la plus sûre façon de le faire?

+0

Il est assez difficile de comprendre quel est le problème réel est ... Il serait rend les choses meilleures si vous fournissez le code qui appelle réellement les méthodes de classe enfant (classes) et échoue à compiler. Ces appels sont-ils censés se trouver dans chaque bloc '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Est-ce que le '' 'callMethodDoSomething''' est un traitement commun que l'élément recevrait indépendamment du fait qu'il étend' '' '' Derived1'' ou '' 'Derived2''' –

+0

Aussi les deux lancent' '' (Derived?) '' 'sont un peu inutiles. –

Répondre

1

C'est la méthode utilisée pour la surcharge.

boolean isNeeded(String name, Derived1 item) { 
    return callMethodDoSomething(
     item.getData().getSpecificData()); 
} 

boolean isNeeded(String name, Derived2 item) { 
    return callMethodDoSomething(
     item.getData().getSpecificData()); 
} 
1

Pourquoi ne pas simplement

boolean isNeeded(Base base) { 
    return callMethodDoSomething(base.getData().getSpecificData()); 
} 

(sauter aussi le paramètre « name », car il n'est pas utilisé)