Si simplemente no necesita nada como su tipo, puede usar void. Esto se puede utilizar para implementar funciones o acciones. Entonces podrías 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 puede omitir la clase abstracta y hacer el retorno nulo en cada acción que no requiera un valor de retorno usted mismo.
Luego puede usar esas acciones como esta:
Dado un método
private static <T> T executeAction(Action<T> action) {
return action.execute();
}
puedes llamarlo como
String result = executeAction(new Action<String>() {
@Override
public String execute() {
//code here
return "Return me!";
}
});
o, para la acción nula (tenga en cuenta que no está asignando el resultado a nada)
executeAction(new VoidAction() {
@Override
public void executeInternal() {
//code here
}
});