tienes Comparable
, por lo que si tiene una zero
, a[0]>0
podría ser sustituido por a[0].compareTo(zero) > 0
(no, yo creo que es < 0
, nunca puedo recordar). Pero ahora nos hemos quedado sin cosas útiles desde Double
y similares.
Si Double
y sus amigos no eran java.lang.Comparable
, podríamos suministrar el nuestro java.util.Comparator
. Es decir, tomamos la implementación de la comparación fuera del objeto de datos. También podemos hacer esa suma y multiplicación.
public interface Testor<T> { // Choose a better name...
boolean isStriclyPositive(T value);
T add(T lhs, T rhs);
T square(T value);
}
static final Testor<Integer> INTEGER_TESTOR = new Testor<>() { // Java SE 7 diamond.
public boolean isStriclyPositive(Integer value) { return value > 0; }
public Integer add(Integer lhs, Integer rhs) { return lhs + rhs; }
public Integer square(Integer value) { return value*value; }
}
// ... same for Double, etc.; can't use an enum :(...
test(new Integer[] { 42, 1972, 86 }, INTEGER_TESTOR);
public <T> void test(T[] a, Testor<T> testor) {
T b = a[0];
if (testor.isStrictlyPositive(a[0])) {
a[0] = testor.square(a[0]);
b = testor.add(b, a[1]);
}
}
Nota para cosas como Short
, sumando dos de ellos le dará una int
.
(Usual descargo de responsabilidad de desbordamiento de pila:. No tanto como trató de compilar el código)
¿Cuál es el problema que está tratando de resolver? Java no es compatible con este tipo de operación genérica. Si entendimos el caso de uso, tal vez podríamos sugerir opciones alternativas. Por ejemplo, creo que nunca es una buena idea utilizar matrices de clases de contenedor (como 'Integer []') en lugar de matrices de primitivas (como 'int []'). ¿Hay alguna razón por la que necesites 'Integer' o' Double' en lugar de 'int' o' double'? –
@DanielPryden: Estoy tratando de resolver: escriba un método que acepte int [], float [], o double [] y dentro del cual necesite hacer una comparación y aritmética, luego devuelva el mismo tipo de matriz int [], o flotar [], o doble []. –
Entonces lo mejor que puede hacer es factorizar sus cálculos reales en un método que opera en un 'double []' y devuelve un 'double []' (ya que 'double' es más ancho que tanto' int' como 'float') Aún necesitará tener dos métodos adicionales para soportar los argumentos 'int []' y 'float []'. –