2
雖然learning Java generics我開始知道,通過協變,我們可以從結構中讀取項目,但是我們不能寫入任何內容,而且我們可以將項目寫入到結構中,但是我們不能從它讀取任何東西。在Java泛型的協變和反變量中的寫入
讓我們舉個例子:
List<? extends Number> myNums = new ArrayList<Integer>();
myNums.add(45L); // Covariance - compiler error
List<? super Integer> myNums = new ArrayList<Integer>();
myNums.add(1);
Number myNum = myNums.get(0); //Contravariance - compiler-error
我所無法理解的是,爲什麼在這件事情被禁止?如果允許這種事情發生,我無法理解會出現什麼問題?
newArrayList需要是新的ArrayList –
這談論什麼可以出錯與協方差:http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas- generics-implicitly-p?rq = 1 –
實際上,你鏈接的文章正好解釋了這個問題。你對這些解釋有什麼具體問題嗎? – user140547