Я пытаюсь расширить абстрактный класс с помощью шаблонов, и у меня возникает проблема:
abstract public class SomeClassA<S extends Stuff> {
protected ArrayList<S> array;
public SomeClassA(S s) {
// ...
}
public void someMethod() {
// Some method using the ArrayList
}
abstract public void anotherMethod() {
// ...
}
}
Теперь я хочу расширить этот класс другим абстрактным классом, чтобы я мог переопределить «someMethod». Я попробовал:
abstract public class SomeClassB<Z extends Stuff> extends SomeClassA {
public SomeClassB(Z z) {
super(z);
}
@Override public void someMethod() {
// Some method using the ArrayList
}
}
NetBeans не видит никаких проблем с конструктором, но я не могу использовать ArrayList из SomeClassA в методе someMethod. Итак, я попробовал:
abstract public class SomeClassB<Z extends Stuff> extends SomeClassA<S extends Stuff> {
public SomeClassB(Z z) {
super(z);
}
@Override public void someMethod() {
// Some method using the ArrayList
}
}
А сейчас это очень странно. Кажется, все работает (и теперь я могу использовать arraylist, но NetBeans говорит, что в объявлении SomeClassB есть «ожидаемый», и он просто не будет компилироваться. Если возможно, я бы хотел:
Чтобы узнать, как решить эту конкретную проблему.
Хорошая справка по пониманию дженериков.
Чтобы узнать, проще ли в C #.