2012-11-20 8 views
6

Io corro Code Analyzer di IntelliJ (IntelliJ 11.1.4) su una classe e sto ricevendo questo avvertimento:Perché è possibile verificare l'assegnazione da un tipo all'altro?

assegnazione non registrato: 'java.util.List' a 'java.util.List'

Il codice si lamenta è:

List<String> targetDocumentIds = pepperWorkflowInstance.getTargetDocumentIds(); 

Per riferimento:

public class PepperWorkflowInstance<T extends PepperWorkflowInstanceData> implements Serializable { 

    private List<String>   targetDocumentIds = new ArrayList<String>(); 
    ... 
    public List<String> getTargetDocumentIds() { 
     return targetDocumentIds; 
    } 
    ... 
} 

Quindi i tipi corrispondono ... quindi perché dovrei 'controllare' il compito?

+4

Che tipo è 'targetDocumentIds' dall'istanza' pepperWorkflowInstance'? – jn1kk

+0

Appena realizzato questo è un avviso IntelliJ, non JVM. Quale versione di IntelliJ hai? – jn1kk

+0

Fatto modifiche per indirizzare i commenti – Dancrumb

risposta

0

Se pepperWorkflowInstance è di super classe in cui viene utilizzato il tipo non elaborato come tipo restituito, può generare tale messaggio.

Esempio.

class A{ 
    public List getTargetDocumentIds(){ 
     return new ArrayList(); 
    } 
} 

class B extends A{ 
    public List<String> getTargetDocumentIds(){ 
     return new ArrayList<String>(); 
    } 
} 

public class Tester { 

    public static void main(String[] args) { 
     A a = new B(); 
     List<String> targetDocumentIds = a.getTargetDocumentIds(); 
     // above produces compiler type safety warning       
    } 
} 
+0

Grazie, ma non sono sicuro che si applica alla mia situazione ... buone informazioni però. – Dancrumb

1

Assicurarsi che pepperWorkflowInstance ha parametro:

pepperWorkflowInstance = new PepperWorkflowInstance<SomeClass>(); 

Vedi IDEA-6254.