List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Hasonló dokumentumok
Programozási nyelvek Java

Collections. Összetett adatstruktúrák

JAVA PROGRAMOZÁS 3.ELŐADÁS

Java és web programozás

Java és web programozás

OOP: Java 8.Gy: Abstract osztályok, interfészek

Generikus osztályok, gyűjtemények és algoritmusok

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Programozási technológia

Programozási nyelvek Java

és az instanceof operátor

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

OOP: Java 8.Gy: Gyakorlás

Programozási nyelvek Java

Abstract osztályok és interface-ek. 7-dik gyakorlat

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Java programozási nyelv 5. rész Osztályok III.

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

Programozási nyelvek II.: JAVA

Programozási nyelvek Java

Programozási nyelvek Java

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozási nyelvek II.: JAVA

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Programozási nyelvek II.: JAVA, 11. gyakorlat

ZH mintapélda. Feladat. Felület

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Magas szintű programozási nyelvek 2 Előadás jegyzet

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

7. K: JAVA alapok Konzultáció

Java 5. Ráth István


1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

J2SE 1.5 Tiger. Bevezetés. Metaadatok. Generikus típus. J2SE 1.5 Tiger. Viczián István (viczian.istvan a gmail-en)

Java IX. telkezelés a Java-ban

Programozási nyelvek Java

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Java IX. telkezelés a Java-ban

Kalapácsvetés 2016 szöveges

Java programozási nyelv 4. rész Osztályok II.

Algoritmusok és adatszerkezetek II.

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

JAVA PROGRAMOZÁS 2.ELŐADÁS

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Java programozási nyelv 6. rész Java a gyakorlatban

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Web-technológia PHP-vel

Objektumorientált programozás C# nyelven

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Generikus Típusok, Kollekciók

Generikusok, Collections Framework JAVA PROGRAMOZÁS 5. GYAKORLAT

OOP: Java 7.Gy: Öröklődés, referenciák

Algoritmusok és adatszerkezetek II.

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

BME MOGI Gépészeti informatika 8.

Java VII. Polimorfizmus a Java nyelvben

Reader /Writer InputStreamReader, OutputStreamWriter

Java VII. Polimorfizmus a Java nyelvben

Java programozási nyelv

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Segédanyag: Java alkalmazások gyakorlat

Tömbök, kollekciók és egyéb alaposztályok

Segédanyag: Java alkalmazások gyakorlat

0. Megoldó Manó 0. Programozás alapjai 2. (inf.) pót zárthelyi gyak. hiányzás: 2 n/kzhp: n/11,5. ABCDEF IB.028/2.

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

4. Gy: JAVA osztályok

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

Programozás I. Első ZH segédlet

A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.

Programozási nyelvek II.: JAVA, 4. gyakorlat

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

.Net adatstruktúrák. Készítette: Major Péter

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Java és web programozás

Újdonságok a Java nyelvben

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Tulajdonságalapú tesztelés

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Segédanyag: Java alkalmazások gyakorlat

Komputeralgebra Rendszerek

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Java Programozás 3. Gy: Java GUI. Swing, AWT

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

BME MOGI Gépészeti informatika 4.

C#, OOP. Osztályok tervezése C#-ban

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Átírás:

Generics Egyszerűbb példák (java.util csomagból): public interface List<E> { void add(e x); Iterator<E> iterator(); public interface Iterator<E> { E next(); boolean hasnext(); E - formális típusparaméter, amely aktuális értéket a kiértékelésnél vesz fel (pl. Integer, etc.). Altípusosság Nem konvertálhatók, ennek oka: List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error // Mert akkor lehetne ilyet csinalni: l2.add(new Object()); l1.get(0); // Hiba: Object -> String castolas Wildcardok Probléma: általános megoldást szeretnénk, amely minden collectiont elfogad, függetlenül az azokban tárolt elemektől (pl. ki szeretnénk őket írni). Collection<Object> nem őse. Ha nem használunk genericeket, megoldható, viszont warningot generál: void print(collection c) { for (Object o : c) System.out.println(o); A megoldás a wildcard használata: Collection<?> minden kollekcióra ráillik. Ilyenkor Object-ként hivatkozhatunk az elemekre: 1

void print(collection<?> c) { for (Object o : c) System.out.println(o); Vigyázat! A?!= Object! Csak egy ismeretlen típust jelent. kódrészlet is fordítási hibához vezet: Így a következő List<?> c =...; l.add(new Object()); // forditasi hiba Nem tudjuk, hogy mi van benne, lekérdezni viszont lehet (mert tudjuk, hogy minden objektum az Object leszármazottja). Bounded wildcard Amikor tudjuk, hogy adott helyen csak adott osztály leszármazottai szerepelhetnek, első (rossz) megközelítés: abstract class Super { class Sub1 extends Super { class Sub2 extends Super {... void func(list<super> l) {... // Rossz! Probléma: func() csak List<Super> paraméterrel hívható meg, List<Sub1>, List<Sub2> nem lehet paramétere (nem altípus). Megoldás: bounded wildcard: void func(list<? extends Super> l) {... Belepakolni ugyanúgy nem tudunk, mint a? esetén, azaz erre fordítási hibát kapunk: void func(list<? extends Super> l) { l.add(new Sub1()); // hiba Felfelé is megköthető a wildcard a <? super T> jelöléssel. (The syntax? super T denotes an unknown type that is a supertype of T) 2

Generikus osztályok, függvények Osztálydefinícióban bevezethető típusparaméter az osztályhoz, ez minden member-nél használható. Példa: package generics; public class Pair<T, S> { private final T first; private final S second; public Pair(final T first, final S second) { super(); this.first = first; this.second = second; public T getfirst() { return first; public S getsecond() { return second; // Esetleges null ellenorzeseket tessek elvegezni! // Itt az attekinthetoseg kedveert ettol eltekintettem. public boolean equals(final Object obj) { if (obj instanceof Pair) { Pair<?,?> pair = (Pair<?,?>) obj; return first.equals( pair.first ) && second.equals( pair.second ); return false; // Esetleges null ellenorzeseket tessek elvegezni! // Itt az attekinthetoseg kedveert ettol eltekintettem. public int hashcode() { return first.hashcode() + second.hashcode(); public String tostring() { return "(" + first + ", " + second + ")"; 3

Generikus függvények esetén szintén a definícióban használható. Példa: package generics; public class ArrayUtils { public static final <T, S extends T> boolean isin(final T[] arr, final S element) { for (final T t : arr) { if (t.equals(element)) return true; return false; public static void main(final String[] args) { final String[] sarr = {"a", "b", "c"; System.out.println( isin(sarr, "c") ); +/- Feladatok Készíts egy saját, generikus Stack implementációt! A reprezentációt tetszőlegesen megválaszthatod. Valósítsd meg a szokásos stack muveleteket: push(e), pop(), top(), size(), isfull(), isempty(). Gyakorló feladatok 1. Feladat Készíts egy generikus reverse() függvényt, amely egy tetszőleges lista adatszerkezetet képes visszafelé kiírni a képernyőre! 2. Feladat Készíts egy generikus fill() függvényt, amely a paraméterként kapott, tetszőleges lista minden elemét lecseréli a megadott elemre. 4

3. Feladat Készíts egy olyan generikus min() és max() függvényt, amely egy tetszőleges kollekcióban megkeresi és visszaadja a minimális és maximális elemet! Segítség: kell hozzá a Comparable! public static <T extends Comparable<? super T>> T max(collection<t> coll) További magyarázat ehez: http://docs.oracle.com/javase/tutorial/extra/generics/morefun.html 5