Wygląda na to, że nie można tego zrobić, ale czy ktoś ma sprytny sposób na obejście tego problemu?Wymusza typ ogólny na interfejs?
public class SomeClassIterableWrapper<S, T extends SomeClass & S> implements Iterable<S>
przypadku S
ma być interfejs nieznanego typu i SomeClass
jest 2D tablicę z indeksem wiersza, działa podobnie do dwukierunkowego JDBC wynikowego. Podklasy SomeClass
mają niestandardowe moduły pobierające i ustawiające dla każdej kolumny. Chcę móc powtarzać tę strukturę, tak jakbym robił listę. Chcę zaimplementować wspólny interfejs między moimi SomeClass
i Bean, aby mieć dostęp do modułów pobierających i ustawiających. Jako taki S musi być tym interfejsem. Jednak deklaracja, którą podałem, nie działa. Czy istnieje sposób obejścia tego?
edit pokazać mój pożądany realizacji:
public class SomeClassIterableWrapper<S, T extends SomeClass & S> implements Iterable<S>{
T object;
public SomeClassWrapper(T object){
this.object = object;
}
@Override
public Iterator<S> iterator() {
object.setIndex(-1);
return new SomeClassIterator<S>();
}
private class SomeClassIterator<S> implements Iterator<S> {
@Override
public boolean hasNext() {
return object.index() < object.rowSize() - 1;
}
@Override
public S next() {
object.next();
//safe because only interface methods allowed, can't further manipulate index
return object;
}
@Override
public void remove() {
object.deleteRow();
}
}
Co masz na myśli przez? Java nie obsługuje dziedziczenia wielokrotnego. Czy chcesz uzyskać gwarancję, że T rozszerza SomeClass I implementuje S? –
Zgodnie z opisem, S jest interfejsem –
@LudwigMagnusson, można używać tylko 'extends X' w ogólnej definicji parametru typu, niezależnie od tego, czy' X' jest klasą czy interfejsem. –