Mi chiedo se sia possibile richiedere che un parametro del metodo java sia di qualsiasi tipo da un insieme finito di tipi. Ad esempio, sto utilizzando una libreria in cui due (o più) tipi hanno metodi comuni, ma il loro più basso antenato comune nella gerarchia di tipi è Object. Cosa intendo qui:Parametro del metodo multi-tipo Java?
public interface A {
void myMethod();
}
public interface B {
void myMethod();
}
...
public void useMyMethod(A a) {
// code duplication
}
public void useMyMethod(B b) {
// code duplication
}
Voglio evitare la duplicazione del codice. Quello che penso è qualcosa del genere:
public void useMyMethod(A|B obj){
obj.myMethod();
}
C'è già un tipo simile di sintassi in java. Ad esempio:
try{
//fail
} catch (IllegalArgumentException | IllegalStateException e){
// use e safely here
}
Ovviamente questo non è possibile. Come posso ottenere un codice ben progettato utilizzando questo tipo di gerarchia di tipo non modificabile?
Come avrete un'interfaccia comune, come dovrebbe il vostro check compilatore che i due o più classi di avere una "interfaccia" comune? Il problema è anche che il codice che definisci come "duplicazione" non è duplicato in base al codice del programma poiché hai due gerarchie di classi diverse: il codice ha lo stesso aspetto ma funziona su strutture di dati completamente diverse. – Smutje
Questo è facile in Scala, ma probabilmente non ti aiuta. Tutto quello che posso suggerire è creare un wrapper per un'interfaccia che implementa l'altro (o wrapper per entrambi che implementano la stessa interfaccia). – lmm
Dato che lo hai etichettato per "modelli di progettazione", mi viene in mente il modello * adattatore *. Ma questo richiede di codificare un wrapper per ognuno di questi tipi. Senza farlo, ho paura che non ci sarà una soluzione al sicuro dal punto di vista statico. Almeno, sarei sorpreso se ci fossero. – 5gon12eder