Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Mind a Java 5.0 mind a .NET 2.0 támogatja a generikus szűkítést, bár eltérő módon. A Java a "code sharing" technikát használja, vagyis az alaptípus kerül használatra és a fordító oldja meg a típusvédelmet. .NET esetén a típus szűkítése önálló típusként kerül a VM elé. A code sharing egy érdekes mellékhatást hoz létre, nézzük az alábbi kód futását:

Code Block
List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
List list2 = list1;
list2.add("A");
for (int i : list1)
{
  System.out.println(i);
}

A lényeg ott van, hogy list2 már nem tartalmaz szűkítést a típusra vonatkozóan, s egy szimpla referencia lesz csak, amelyhez azonban hozzá tudunk adni egy String típusú értéket, amelyre aztán a list1 példányon alapuló ciklus jól kiakad:

Code Block
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

A .NET futásidejű specializációja jobb teljesítményt is jelent, mivel nincs szükség classcast műveletre.