Geneeriset metodit ja luokat
Määrittäkää geneerisiä luokkia tyyppiparametreilla ja kirjoittakaa geneerisiä metodeja, joissa <T> tulee ennen paluutyyppiä. Oppikaa, missä tyypin päättely auttaa.
Geneeriset metodit ja luokat on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 3 oppituntia.
Yleiskatsaus
Geneeriset luokat käyttävät yhtä rakennetta uudelleen monien tyyppien kanssa, ja geneeriset metodit toimivat tyyppiparametrien kanssa myös ei-geneerisissä luokissa. Luomme pienen Pair<T,U>-tyypin, swap-metodin ja staattisen factory-metodin.
Miksi geneerisiä luokkia käytetään?
Miksi luokasta tehdään geneerinen?
- Yksi rakenne, monta tyyppiä: vähentää toistoa.
- Tyyppiturvallisuus: väärät tyypit havaitaan käännösvaiheessa.
- Selkeä API: paluuarvoissa ei tarvita castauksia.
Koodi: Pair<T,U>
Pair<T,U> mahdollistaa saman luokan käyttämisen kahden eri tyypin kanssa. Castauksia ei tarvita, ja API on selkeä.
public class Main {
// Simple generic data holder with two type parameters
static class Pair<T, U> {
private final T first;
private final U second;
Pair(T first, U second) { this.first = first; this.second = second; }
T first() { return first; }
U second() { return second; }
public String toString() { return "Pair(" + first + ", " + second + ")"; }
}
public static void main(String[] args) {
Pair<String, Integer> p = new Pair<>("age", 21);
System.out.println(p);
System.out.println(p.first() + " -> " + p.second());
}
}
Geneeriset metodit: allekirjoitus
Geneeriset metodit toimivat riippumatta siitä, onko luokka geneerinen. Allekirjoitus: <T> returnType... Esimerkki: <T> T firstOrDefault(T[] arr, T def).
Koodi: geneerinen swap
<T> määritellään metoditasolla; siksi metodi toimii eri taulukoiden kanssa. Kutsussa tyyppiä ei määritetty, vaan kääntäjä päätteli sen.
public class Main {
// Generic utility method: swap two indices of an array of any reference type
static <T> void swap(T[] arr, int i, int j) {
T tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
}
public static void main(String[] args) {
String[] names = { "Ada", "Bob", "Cyd" };
swap(names, 0, 2); // works with String[]
for (int k = 0; k < names.length; k = k + 1) {
System.out.print(names[k] + (k < names.length - 1 ? " " : "\n"));
}
}
}
Koodi: staattinen geneerinen factory
Staattisessa geneerisessä factory-metodissa kutsun of(T v) tyyppi päätellään. Käyttö on selkeää ja luettavaa.
public class Main {
static class Box<T> {
private final T value;
private Box(T v) { this.value = v; }
public T get() { return value; }
// Static generic factory method inside a generic class
public static <T> Box<T> of(T v) { return new Box<T>(v); }
}
public static void main(String[] args) {
// Type inferred by diamond and method generic parameter
Box<Integer> bi = Box.of(42);
Box<String> bs = Box.of("hi");
System.out.println(bi.get() + 1);
System.out.println(bs.get().toUpperCase());
}
}
Geneeristen metodien tarkistus
Pikatarkistus: Miten geneerinen metodi määritellään oikein?
Kertaus
Kertaus: Geneeriset luokat (Pair<T,U>) vähentävät toistoa; geneeriset metodit (<T>-allekirjoitus) toimivat luokasta riippumatta. Tyypin päättely yksinkertaistaa kutsuja.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 104
- Oppitunnit
- 374
Usein kysytyt kysymykset
Onko oppitunti ”Geneeriset metodit ja luokat” ilmainen?
Kyllä – oppitunnin ”Geneeriset metodit ja luokat” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”Geneeriset metodit ja luokat”?
Määrittäkää geneerisiä luokkia tyyppiparametreilla ja kirjoittakaa geneerisiä metodeja, joissa <T> tulee ennen paluutyyppiä. Oppikaa, missä tyypin päättely auttaa. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/3.
Kuinka kauan ”Geneeriset metodit ja luokat”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?
Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Rajapinnat käytännössä
- Geneeristen tyyppien perusteet (T, päättely)
- Geneeriset metodit ja luokat