2014-06-14 5 views
0

s'il vous plaît la recherche code suivant extrait:Comment comprendre quel type a été sélectionné au lieu de T dans la méthode générique?

class Ideone { 
    public static void main (String[] args) throws java.lang.Exception { 
     List<Integer> listIntegers = null; 
     List<Object> listObjects = null; 
     MyClass mcls =new MyClass(); 

     SomeReference ref = mcls.method(listIntegers,listObjects));//which SomeReference may be? 
    } 
} 

class MyClass { 
    <T> T method(List<? extends T> arg1, List<? super T> arg2) { 
     return null; 
    } 
} 

Que puis-je écrire dans la déclaration de retour de la méthode avec le nom method sauf null;

Objet? Numéro? Entier?

+0

Qu'est-ce que vous voulez retourner? Quelle est votre sortie attendue? – Braj

+0

@Braj Je suis confus ce que je peux retourner. Je veux connaître toutes les variantes possibles – gstackoverflow

+0

Si vous ne savez pas ce que vous voulez faire, d'abord pensez-y et demandez à nouveau. Même si vous ne savez pas ce que cette méthode est en train de faire ici, alors comment pouvez-vous attendre de nous pour y penser. ** Jamais ** poser une question aussi stupide qui n'est même pas claire pour vous même. – Braj

Répondre

2

Cela pourrait vous aider à le comprendre. Comme vous ne pouvez pas retourner un élément de la deuxième liste, il n'y a qu'une seule option pour renvoyer l'élément de la première liste.

class MyClass { 
    <T> T method(List<? extends T> list1, List<? super T> list2) { 
     return list1.get(0); // Valid 
     //return list2.get(0); // Invalid Type mismatch: cannot convert from capture#1-of ? super T to T 
    } 
} 

List<Integer> listIntegers = new ArrayList<Integer>(); 
listIntegers.add(1); 

List<String> listObjects = new ArrayList<String>(); 
listObjects.add("2"); 

MyClass mcls = new MyClass(); 

// Valid 
Integer result=mcls.method(listIntegers, listObjects); 

// Invalid 
String result=mcls.method(listIntegers, listObjects); 
// The method method(List<? extends T>, List<? super T>) in the type MyClass is not applicable for the arguments (List<Integer>, List<String>) 
+0

Ainsi, T est le type le plus spécifique? – gstackoverflow

+0

Si vous pensez que vous passerez deux types de liste différents dans cette méthode, alors utilisez deux paramètres génériques '' – Braj

+0

c'est seulement une question théorique – gstackoverflow

Questions connexes