Si sólo no necesita nada como su tipo, se puede utilizar sin efecto. Esto se puede usar para implementar funciones o acciones. A continuación, podría hacer algo como esto:
interface Action<T> {
public T execute();
}
abstract class VoidAction implements Action<Void> {
public Void execute() {
executeInternal();
return null;
}
abstract void executeInternal();
}
O usted podría omitir la clase abstracta, y hacer la hipótesis nula de retorno en cada acción que no requiere un valor de retorno a sí mismo.
A continuación, podría utilizar esas acciones como esta:
da un método
private static <T> T executeAction(Action<T> action) {
return action.execute();
}
se le puede llamar como
String result = executeAction(new Action<String>() {
@Override
public String execute() {
//code here
return "Return me!";
}
});
o, por la acción de vacío (tenga en cuenta que' no está asignando el resultado a nada)
executeAction(new VoidAction() {
@Override
public void executeInternal() {
//code here
}
});
¿Para qué necesita esto? – Bozho
estoy escribiendo un intérprete para un formato de archivo, utilizando el patrón de intérprete, pero algunas expresiones no tienen valores de retorno – Robert
No hay forma de crear una instancia del tipo Void, por lo que si realmente tiene que devolver algo de ese tipo, null es tu única opción. Sin embargo, probablemente no necesite el valor devuelto para nada, por lo que null debería estar bien. – Jorn