Что корректный путь состоит в том, чтобы возвратить a Void
введите, когда это не будет примитив? Например, Я в настоящее время использую пустой указатель как ниже.
interface B<E>{ E method(); }
class A implements B<Void>{
public Void method(){
// do something
return null;
}
}
Класс Void - это неустановленный класс-заполнитель для хранения ссылки на объект Class, представляющий ключевое слово Java void.
Таким образом, будет достаточно любого из следующего:
Object
и возврат new Object ()
или null
Void
и возвращение null
NullObject
вашего . Вы не можете сделать этот метод недействительным
, и что-либо еще возвращает что-то . Поскольку это что-то игнорируется, вы можете вернуть что угодно.
Если вам просто ничего не нужно в качестве вашего типа, вы можете использовать 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
}
});
Там не является универсальным типом, который сообщит компилятору, что метод ничего не возвращает.
Я считаю, что соглашение заключается в использовании Object при наследовании в качестве параметра типа
ИЛИ
Распространение параметра типа вверх, а затем позволяет пользователям вашего класса создавать экземпляр с помощью Object и присваивать объект переменной, типизированной с использованием типа -wildcard ?
:
interface B<E>{ E method(); }
class A<T> implements B<T>{
public T method(){
// do something
return null;
}
}
A<?> a = new A<Object>();