Quisiera saber si es posible obligar a una clase a tener un método estático que encaje en un cierto patrón. Me explico. Por ejemplo, imaginemos que tenemos una clase "Entero" que pretende implementar las operaciones con números enteros y que tiene un método estático llamado "suma", que básicamente devuelve la suma de dos números enteros pasados por parámetro y cuya declaración es del tipo:
Código
public static Entero suma (Entero entero1, Entero entero2){/*...*/}
También podríamos tener una clase "Real" que pretenda implementar las operaciones que se pueden hacer con números reales y que podría tener declarado un método "suma" tipo:
Código
public static Real suma (Real real1, Real real2){/*...*/}
Pues bien, me gustaría poder trabajar con una clase que trabaje con elementos de una clase genérica que obligatoriamente tenga declarado un método de este tipo sin importar que sean enteros, reales o lo que sea... Por ejemplo, imaginemos que queremos declarar una clase "Vector", que contendrá elementos de una clase genérica (que pueden ser enteros o reales) y queremos definir la suma de vectores a partir de la suma de sus elementos. Algo así:
Código
public class Vector <Elemento /*Aqui es donde me gustaria indicar que Elemento debe implementar una interfaz, o extender una clase o algo asi*/> { ... for (int i=0; i<nuevo.getTamanyo(); i++){ nuevo.setElemento(i, Elemento.suma(vector1.getElemento(i),vector2.getElemento(i)); } }
Mi intento ha sido el de declarar una interfaz "Grupo" de la siguiente manera:
Código
public interface Grupo<TipoGrupo extends Grupo> { public static TipoGrupo suma (TipoGrupo e1, TipoGrupo e2); }
Y luego la clase "Entero" declararla así:
Código
public class Entero implements Grupo <Entero> { ... public static Entero suma(Entero entero1, Entero entero2){...}
Pero no funciona... En la interfaz Grupo, en la línea del método "suma", me sale un error que dice que "un tipo de variable no estático como "TipoGrupo" no se puede referenciar desde un entorno estático" lo cual tiene su lógica, y otro error que dice que "falta el cuerpo del método o declararlo abstracto". Si lo declaro abstracto el primer error se mantiene y aparece otro que dice que es ilegal combinar los modificadores static y abstract.
¿Realmente se puede obligar a que una clase tenga un método estático que encaje en una cierta declaración?
Gracias de antemano por la ayuda. Un saludo.