Обобщения Java: подстановочные знаки в коллекциях
- продолжается
- супер
-
Сегодня я собираюсь объяснить вам, как полезны джокеры. Понять эту концепцию немного сложно
Теперь предположим, что у вас есть абстрактный класс, и у вас есть абстрактный метод paintObject ().
Now you want to use different type of collection in every child class.
Ниже приведен метод AbstractMain.
Вот шаги, которые мы предприняли для этого абстрактного метода Main
1. Мы создали абстрактный класс
2. В параметре у нас есть определение T (вы можете использовать любой символ)
- В этом случае любой класс, реализующий этот метод, может использовать любой тип класса.
ех. Класс может реализовывать метод как
public void paintObject (объект ArrayList) или public void paintObject (объект HashSet)
3. И мы также использовали E extends MainColorTO
- В этом случае E расширяет MainColorTo
- Это ясно означает, какой класс вы хотите использовать, который должен быть подклассом MainColorTo
4. Мы должны определить абстрактный метод с именем paintObject (T object, E objectTO)
- Теперь здесь, в зависимости от того, какой класс реализует метод, метод может использовать любой класс по первому аргументу, а по второму параметру этот метод должен использовать тип MainColorTO
public abstract class AbstractMain<T,E extends MainColorTO> {
public abstract void paintObject(T Object,E TO);
}
Теперь мы продолжим выше абстрактный класс и реализуем метод в следующем классе
напр.
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......");
}
}
Теперь мы возьмем два примера.
1.PaintHome.java
public class PaintHome extends AbstractMain<ArrayList, RedTO> {
@Override
public void paintObject(ArrayList arrayList,RedTO red) {
System.out.println(arrayList);
}
}
Теперь выше в PaintHome.java вы можете проверить, что мы использовали ArrayList в первом аргументе (как мы можем взять любой класс), а во втором аргументе мы использовали RedTO (который расширяет MainColorTO)
2.PaintCar.java
public class PaintCar extends AbstractMain<HashSet, WhiteTO>{
@Override
public void paintObject(HashSet Object,WhiteTO white) {
System.out.println(Object);
}
}
Теперь выше в PaintCar.java вы можете проверить, что мы использовали HashSet в первом аргументе (как мы можем принять любой класс), а во втором аргументе мы использовали WhiteTO (который расширяет MainColorTO)
Понять, чтобы запомнить
Вы не можете использовать супер ключевое слово на уровне класса, вы можете использовать только ключевое слово extends при определении уровня класса
public abstract class AbstractMain<P,E super MainColorTO> {
public abstract void paintObject(P Object,E TO);
}
Приведенный выше код выдаст вам ошибку компилятора.