Java rodzajowych: Dzikie karty w kolekcjach
- rozciąga
- Super
- ?
Dziś wyjaśnię, jak przydatne są dzikie karty. Aby zrozumieć pojęcie to jest trochę trudne
Teraz Załóżmy, że masz klasę abstrakcyjną i że trzeba abstrakcyjny metodę zwaną paintObject().
Now you want to use different type of collection in every child class.
Poniżej znajduje się metoda AbstractMain.
Oto kroki podjęliśmy dla tej metody Streszczenie Głównym
1. stworzyliśmy abstrakcyjne klasy
2. w parametrze musimy zdefiniować T (można użyć dowolnego znaku) - W tym przypadku dowolna klasa implementująca tę metodę może użyć dowolnego typu klasy. np. Klasa może implementować metody takie jak public void paintObject obiektu ArrayList() lub public void paintObject (Object Hashset)
3. I Użyliśmy również E rozciąga MainColorTO - W tym przypadku E rozciąga MainColorTo - To wyraźnie oznacza którykolwiek klasa chcesz użyć, które muszą być sub klasa MainColorTo
4. Musimy zdefiniować abstrakcyjną metodę zwaną paintObject (T obiekt, E objectTO) --Now tutaj cokolwiek klasa jest wdrożenie metody, która metoda może użyć dowolnej klasy na pierwszy argument i drugiego parametru, że metoda ma użyć typu z MainColorTO
public abstract class AbstractMain<T,E extends MainColorTO> {
public abstract void paintObject(T Object,E TO);
}
Teraz będziemy rozszerzać klasę abstrakcyjną i implementować metodę poniżej klasy np.
public class MainColorTO {
public void paintColor(){
System.out.println("Paint Color........");
}
}
public class RedTO extends MainColorTO {
@Override
public void paintColor() {
System.out.println("RedTO......");
}
}
public class WhiteTO extends MainColorTO {
@Override
public void paintColor() {
System.out.println("White TO......");
}
}
Teraz weźmiemy dwa przykłady.
1.PaintHome.java
public class PaintHome extends AbstractMain<ArrayList, RedTO> {
@Override
public void paintObject(ArrayList arrayList,RedTO red) {
System.out.println(arrayList);
}
}
Teraz w wyżej PaintHome.java można sprawdzić, że użyliśmy ArrayList w pierwszym argumencie (Jak możemy podjąć każdą klasę) oraz w drugim argumencie użyliśmy RedTO (który rozciąga MainColorTO)
2.PaintCar.java
public class PaintCar extends AbstractMain<HashSet, WhiteTO>{
@Override
public void paintObject(HashSet Object,WhiteTO white) {
System.out.println(Object);
}
}
Teraz w powyższym PaintCar.java można sprawdzić, że użyliśmy HashSet w pierwszym argumencie (Jak możemy podjąć żadnej klasy) oraz w drugim argumencie użyliśmy WhiteTO (który rozszerza MainColorTO)
Ponint uczuć nie można użyć słowa kluczowego super na poziomie klasy można użyć tylko rozszerza słowa kluczowego na poziomie klasy defination
public abstract class AbstractMain<P,E super MainColorTO> {
public abstract void paintObject(P Object,E TO);
}
Powyższy kod daje błąd kompilatora.
Nie, to nie w porządku. Przynajmniej z drugiego akapitu wyjaśnienia nie ma tematu. Tu nie chodzi o wymazywanie typu. – jrudolph
Również akapit pierwszy jest nieprawidłowy. Możesz usunąć lub dodać wartość null do listy, jak zadeklarowano w pytaniu, możesz także dodać odniesienia (bez wartości null), jeśli symbol wieloznaczny jest zdefiniowany jako super-granica. –