with tutorial framework español djangoproject desde con cero applications java android generics types charsequence

java - framework - tutorial django



OR genérico en lugar de AND<T extiende número | CharSequence> (2)

¿Es posible parametrizar genéricamente un método que acepte CUALQUIER clase A o interfaz B?

No se compila debido a | Pseudocódigo

public <T extends Number | CharSequence> void orDoer(T someData){ // ... }

es decir, en lugar de escribir varias firmas de métodos, me gustaría que este método aceptara un número o una secuencia de caracteres como argumento

Debe pasar con un argumento Number OR CharSequence

orDoer(new Integer(6)); int somePrimitive = 4; orDoer(somePrimitive); orDoer("a string of chars");


¿Usar una clase abstracta anónima es una opción para ti? Cuando necesito tipos de parámetros seguros o tipos de devolución, uso alguna variante del código a continuación. Una vez dicho esto, estoy de acuerdo con los otros comentarios aquí, y tengo curiosidad por saber qué beneficio obtendrá realmente cuando implemente un tipo de seguridad para un grupo de objetos que no tienen tanto en común.

public abstract class Doer<T> { public void do(T obj) { // do some stuff. } } // calling method new Doer<Number>(){}.do(new Integer(5));


Si realmente quieres hacerlo, deberás envolver tus clases aceptadas dentro de una clase personalizada propia. En su caso de ejemplo, probablemente algo así como:

public class OrDoerElement { private final Number numberValue; private final CharSequence charSequenceValue; private OrDoerElement(Number number, CharSequence charSequence) { this.numberValue = number; this.charSequenceValue = charSequence; } public static OrDoerElement fromCharSequence(CharSequence value) { return new OrDoerElement(null, value); } public static OrDoerElement fromNumber(Number value) { return new OrDoerElement(value, null); } }

Y su método orDoer se convierte en:

public void orDoer(OrDoerElement someData) { .... }

Luego puedes construir uno de esos y usar en tu método usando:

orDoer(OrDoerElement.fromCharSequence("a string of chars")); orDoer(OrDoerElement.fromNumber(new Integer(6)));

Pero, sinceramente, eso suena demasiado complejo y demasiado trabajo solo para poder llamar a un método con diferentes tipos de parámetros. ¿Estás seguro de que no puedes lograr lo mismo usando dos métodos y un tercer método para la lógica común?