возврат Пустого объекта

Что корректный путь состоит в том, чтобы возвратить a Void введите, когда это не будет примитив? Например, Я в настоящее время использую пустой указатель как ниже.

interface B<E>{ E method(); }

class A implements B<Void>{

    public Void method(){
        // do something
        return null;
    }
}
104
задан Robert 9 March 2010 в 11:30
поделиться

3 ответа

Класс Void - это неустановленный класс-заполнитель для хранения ссылки на объект Class, представляющий ключевое слово Java void.

Таким образом, будет достаточно любого из следующего:

  • параметризация с помощью Object и возврат new Object () или null
  • параметризация с помощью Void и возвращение null
  • параметризация с помощью NullObject вашего

. Вы не можете сделать этот метод недействительным , и что-либо еще возвращает что-то . Поскольку это что-то игнорируется, вы можете вернуть что угодно.

123
ответ дан 24 November 2019 в 04:12
поделиться

Если вам просто ничего не нужно в качестве вашего типа, вы можете использовать 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
    }
});
3
ответ дан 24 November 2019 в 04:12
поделиться

Там не является универсальным типом, который сообщит компилятору, что метод ничего не возвращает.

Я считаю, что соглашение заключается в использовании 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>();
0
ответ дан 24 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: