Non ho ancora trovato un modo elegante per risolvere questo problema. Ho una classe astratta che molte altre classi stanno ereditando con un metodo astratto che può contenere da zero a 4-5 argomenti di tipi diversi.Metodo astratto con lista variabile di argomenti
public abstract class Item {
public abstract void use();
}
Per esempio, ho una classe che eredita Prenota questo e non accetta argomenti quando sovrascrivendo uso(), ho una classe che eredita chiave e prende una stringa e una coda come argomenti quando si esegue l'override, ecc ..
Ho provato a utilizzare i generici, ma devo inserire il numero usato, come ad esempio Item, quando in realtà dipende dalla classe.
public abstract class Item<T,U> {
public abstract void use(T arg1, U arg2); //Number of arguments/types could be more or less
}
Ho provato l'invio di un elenco di variabili di oggetti, ma i tipi di oggetti sono sempre variabile e non ho dubbi per quanto riguarda la sintassi di ricevere nelle classi che ereditano.
public abstract class Item<T> {
public abstract void use(T... arguments);
}
public class Book extends Item<?> {
public void use(?);
}
public class Book extends Item<String, Queue> { //Wrong number of arguments since I can't use Item<T...>
public void use(String str, Queue q); //fails
}
Forse sto facendo qualcosa di sbagliato - qualcuno può offrire assistenza o intuizione?
Se si esegue l'opzione 'Item it = new Book();', come si propone di chiamare il metodo 'Book.use (String, Queue);' su di esso se il compilatore non può sapere quali sono i tipi di argomenti corretti ? E se non ti aspetti di avere mai una sottoclasse di 'Item' in una variabile della classe genitore, perché il metodo deve essere astratto? – millimoose