Egy tech cég kulisszatitkai

Type-Safety

2014. szeptember 28. - EPAM

Elkezdődött az akadémia, túl vagyunk az első benyomásokon. Mindannyian találkoztunk jól ismert, kevésbé ismert és új dolgokkal. Például elhangzott egy fogalom, hogy egy program "type safe", ha warning-ok nélkül fordul és ha nem használunk benne explicit típus konverziót, akkor futásidőben nem fog ClassCastException-t dobni. Számomra ez új volt, de legalábbis eddig nem érdekelt vagy foglalkoztam vele, hiszen a scriptjeimet nem különösebben érintette. Mindenesetre ez a definíció arra bátorít, hogy konstruáljunk olyan programot, ami warningok nélkül fordul, nem konvertál, mégis ClassCastException-t dob, úgyse fog sikerülni.

Nézzük hát a következő explicit konverzió mentes program részletet:

                ArrayList<Object> l = new ArrayList<Integer>();

                l.add(new Object());

                Integer i = l.get(0);

Készítünk egy üres Integer listát amire Object lista referenciával mutatunk. Ezt a referenciát használva kibővítjük a listát egy új Object-el, majd elkérünk egy Integer referenciát az Integer lista első elemére. Mivel Object-et nem lehet Integer-be konvertálni azt várjuk, hogy ezért futásidőben CastCastException-t kapunk.

Nem ez a helyzet, mivel a compiler már az első sort type mismatch error-al jutalmazza pont emiatt a példa miatt.

Ezek után felmerül bennem az esetleges vizsgakérdés, hogy vajon ugyanez a műsor tömb esetén mit eredményez?

 

                Object[] a = new Integer[1];

                a[0] = new Object();

                Integer i = a[0];

 

                (a) lefordul és fut

                (b) lefordul és ClassCastException-t dob

                (c) nem fordul és az első sor type mismatch error-t ad

                (d) nem fordul és a harmadik sor type mismatch error-t ad

 

Ezt ténylegesen ki is próbáltam, de azért nagyon nem szeretnék vele semmilyen vizsgán se találkozni. Nagy a fogadkozás, hogy az Epam Academy vizsgán ilyen kérdések nem lesznek, de hát ez csak az első vizsga után tud kiderülni ami egy hét múlva lesz, és természetesen én addig semmit sem hiszek el.

Végezetül talán érdemes megjegyezni, hogy az alábbi program lefordul és ArrayStoreException-t dob - mellékesen a helyes választ is mutatja az előző kérdésre:

 

                Object[] a = new Integer[1];

                a[0] = new Object();

                Integer i = (Integer) a[0];

A bejegyzés trackback címe:

https://epam.blog.hu/api/trackback/id/tr116699861

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása