Generic OR en lugar de AND <T extends Number | CharSequence>
¿Es posible parametrizar genéricamente un método que acepta O bien ClassA O InterfaceB?
No compilar debido a | Pseudocódigo
- Smartcast es imposible porque propery tiene getter abierto o personalizado
- En Android OS o Java, ¿cuál es la diferencia entre una secuencia de caracteres y una cadena?
- Tabla de SQLite con columnas de columna de enteros
- Qué son los tipos de datos en SQLite que soportan android
- Multiplicando un vector2 por un escalar (LibGDX)
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 aceptar un número o CharSequence como un argumento
Debe pasar con un argumento Number o CharSequence
orDoer(new Integer(6)); int somePrimitive = 4; orDoer(somePrimitive); orDoer("a string of chars");
- Kotlin - cuando la expresión con el tipo de retorno de la función
- Error: Error: Los tipos enteros no están permitidos (en 'layout_height' con el valor '10')
- Android: Obtención de la lista de todos los archivos de un tipo específico
- Determinar el tipo de datos de una columna en SQLite
- Tipos Primitivos de Java: int vs. Integer
- Tipificación de un objeto de la clase padre al niño
- ¿Cómo saber cuál es el tipo MIME según el archivo?
- Las fuentes ttf personalizadas no se muestran correctamente en TextView en Android 4.4 KitKat
Si realmente quieres hacer eso, necesitarás envolver tus clases aceptadas en una clase personalizada. En su caso de ejemplo, probablemente algo 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) { .... }
A continuación, puede crear uno de ellos y utilizarlo en su método mediante:
orDoer(OrDoerElement.fromCharSequence("a string of chars")); orDoer(OrDoerElement.fromNumber(new Integer(6)));
Pero honestamente, eso suena un poco demasiado complejo y demasiado trabajo sólo 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?
¿Está usando una clase abstracta anónima una opción para usted? Cuando necesito tipos de parámetros seguros o tipos de devolución, utilizo alguna variante del código de abajo. Dicho esto, estoy de acuerdo con los otros comentarios aquí, y estoy curioso qué beneficio realmente se derivan cuando se está aplicando un tipo de seguridad para un grupo de objetos que no tienen todo eso 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));