Parece que esto es imposible de hacer, pero ¿alguien tiene una forma inteligente de resolver este problema?¿Obliga a un tipo genérico a ser una interfaz?
public class SomeClassIterableWrapper<S, T extends SomeClass & S> implements Iterable<S>
donde se supone que S
a ser una interfaz de algún tipo desconocido y SomeClass
es una matriz 2D con un índice de fila, similar en funcionalidad a un conjunto de resultados JDBC bidireccional. Las subclases de SomeClass
tienen getters y setters personalizados para cada columna. Quiero ser capaz de iterar a través de esta estructura como lo haría con una lista. Quiero implementar una interfaz común entre mi SomeClass
y Bean para tener acceso a getters y setters. Como tal, S necesita ser esa interfaz. Sin embargo, la declaración que proporcioné no funciona. ¿Hay alguna manera de evitar esto?
de edición para mostrar mi aplicación deseada:
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();
}
}
¿Qué quiere decir por? Java no es compatible con herencia múltiple. ¿Desea una garantía de que T extienda SomeClass Y implemente S? –
Como dice en la descripción, S es una interfaz –
@LudwigMagnusson, solo puede usar 'extends X' dentro de una definición de parámetro de tipo genérico, independientemente de si' X' es una clase o una interfaz. –