Java Generics: The Difference between Java Arrays and Generic Lists | OneWebSQL



studentList = personList;

Answer: incorrect.
This one is obvious to anyone. Surely a list of Persons cannot be assigned to a variable containing a list of Students because the list can contain Person objects which are notStudents.
personList = studentList;
Answer: incorrect.
This assignment is not correct because List<Student> is not a subclass of List<Person>. This is surprising to many Java beginners. Here's an explanation. Imagine for a moment that the assignment was correct. Then the variable personList would hold a reference to thestudentList object (a list of Students). But the variable personList only knows that it is a list of Persons. One can try to insert a Professor into the list.
?
1
personList.add(new Professor("A","B")); //incorrect but compiles

The compiler does not know that the insert operation is incorrect. The runtime system has no way of knowing that the insert is incorrect. 
personArray = studentArray;

Answer: correct.
Here we have another surprise. Arrays in Java are covariant, which, in our example, means that if Student is a subclass of Person (which it is), then Student[] is a subclass ofPerson[].
Java arrays know the type of its elements and they check at runtime whether an element can be inserted into it.
it's not possible that an exception is thrown in a similar situation with parametrized lists. The generic lists do not know the type of its elements at runtime. They cannot checkwhether an element can be inserted into the list. As a consequence, List<Person> is not a subclass of List<Student>.
Read full article from Java Generics: The Difference between Java Arrays and Generic Lists | OneWebSQL

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts