Если вам просто ничего не нужно в качестве вашего типа, вы можете использовать void. Это можно использовать для реализации функций или действий. Затем вы можете сделать что-то вроде этого:
interface Action<T> {
public T execute();
}
abstract class VoidAction implements Action<Void> {
public Void execute() {
executeInternal();
return null;
}
abstract void executeInternal();
}
Или вы можете опустить абстрактный класс и вернуть значение null в каждом действии, которое не требует возвращаемого значения самостоятельно.
Затем вы можете использовать эти действия следующим образом:
Учитывая метод
private static <T> T executeAction(Action<T> action) {
return action.execute();
}
Вы можете назвать это как
String result = executeAction(new Action<String>() {
@Override
public String execute() {
//code here
return "Return me!";
}
});
или для действия void (обратите внимание, что вы ничего не назначаете результат)
executeAction(new VoidAction() {
@Override
public void executeInternal() {
//code here
}
});