Java Дженерики: Дикие карты в коллекциях
- расширяет
- супер
- ?
Сегодня я собираюсь объяснить вам, как полезные карты полезны. Понять эту концепцию немного сложно
Теперь предположим, что у вас есть абстрактный класс и у вас есть абстрактный метод под названием paintObject().
Now you want to use different type of collection in every child class.
Это ниже AbstractMain Method.
Вот шаги, которые мы предприняли для этого Аннотация Основного метода
1. Мы создали абстрактный класс
2. в параметре мы должны определить Т (вы можете использовать любой символ) - В этом случае, какой бы класс не реализовал этот метод, он может использовать любой тип класса. ex. Класс может реализовать метод, как общественного ничтожной paintObject (объект ArrayList) или общественный недействительный paintObject (объект HashSet)
3. И мы также использовали E расширяет MainColorTO - В этом случае Е распространяется MainColorTo - Это явно означает, какой класс вы хотите использовать, который должен быть подклассом MainColorTo
4. Мы определим абстрактный метод, называемый paintObject (T объект, E objectTO) --Now здесь какой класс реализации метод, метод может использовать любой класс по первому аргументу и второго параметра, метод должен использовать тип из MainColorTO
public abstract class AbstractMain<T,E extends MainColorTO> {
public abstract void paintObject(T Object,E TO);
}
Теперь мы продолжим рассмотрение абстрактного класса и реализуем метод ниже класса ex.
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)
Ponint Помнить вы не можете использовать супер ключевое слово на уровне класса можно использовать только ключевое слово проходит на уровне класса Defination
public abstract class AbstractMain<P,E super MainColorTO> {
public abstract void paintObject(P Object,E TO);
}
выше код даст вам компилятора об ошибке.
Нет, это неправильно. По крайней мере, из второго абзаца объяснение не соответствует теме. Дело не в стирании стилей. – jrudolph 2008-09-16 07:55:15
Первый абзац тоже не прав. Вы можете удалить или добавить null в список, как указано в вопросе, вы также можете добавить (не нулевые) ссылки, если подстановочный знак определен с суперсвязью. – 2008-09-16 18:48:30