Se proprio non si ha bisogno di qualcosa come tipo, è possibile utilizzare vuoto. Questo può essere usato per implementare funzioni o azioni. È quindi possibile fare qualcosa del genere:
interface Action<T> {
public T execute();
}
abstract class VoidAction implements Action<Void> {
public Void execute() {
executeInternal();
return null;
}
abstract void executeInternal();
}
Oppure si potrebbe omettere la classe astratta, e fare il return null in ogni azione che non richiede un valore di ritorno da soli.
È quindi possibile utilizzare queste azioni come questa:
dato un metodo di
private static <T> T executeAction(Action<T> action) {
return action.execute();
}
si può chiamare come
String result = executeAction(new Action<String>() {
@Override
public String execute() {
//code here
return "Return me!";
}
});
o, per l'azione vuoto (si noti che è' non assegnando il risultato a nulla)
executeAction(new VoidAction() {
@Override
public void executeInternal() {
//code here
}
});
per cosa ti serve? – Bozho
sto scrivendo un interprete per un formato di file, usando lo schema dell'interprete, ma alcune espressioni non hanno valori di ritorno – Robert
Non c'è modo di creare un'istanza del tipo Void, quindi se davvero devi restituire qualcosa di quel tipo, null è la tua unica opzione. Tuttavia, probabilmente non hai bisogno del valore restituito per qualcosa, quindi null dovrebbe andare bene. – Jorn