Java Generics: Wildcard capture misunderstanding

前端 未结 6 630
醉话见心
醉话见心 2020-12-01 12:27

Reading the Java online tutorial I haven\'t understand anything about wildcard capture. For example:

    import java.util.List;
    public class WildcardErro         


        
6条回答
  •  感情败类
    2020-12-01 12:56

    why the compiler can't retain the assignment safe? It knows that,by executing for instance, the method with an Integer List, it gets from i.get an Integer value. So it try to set an Integer value at index 0 to the same Integer list (i).

    Put differently, why does the compiler not know that the two usages of the wildcard type List in

    i.set(0, i.get(0));
    

    refer to the same actual type?

    Well, that would require the compiler to know that i contains the same instance for both evaluations of the expression. Since i isn't even final, the compiler would have to check whether i could possibly have been assigned in between evaluating the two expressions. Such an analysis is only simple for local variables (for who knows whether an invoked method will update a particular field of a particular object?). This is quite a bit of additional complexity in the compiler for rarely manifesting benefits. I suppose that's why the designers of the Java programming language kept things simple by specifying that different uses of the same wildcard type have different captures.

提交回复
热议问题