2016-04-08 2 views
1

У меня есть некоторые общие процессоры, которые вызывается каркасом. Аргумент - это полезная нагрузка, которую я обрабатываю.NullType vs Void для аргумента метода, который всегда равен нулю

interface Processor<T, U> { 
    U process(T t); 
} 

Бывают ситуации, когда полезная нагрузка не имеет смысла и не существует (рассчитывается и возвращается только ответ). В этом случае рамка передает null в качестве аргумента. Я решил использовать javax.lang.model.type.NullType для этой цели:

new Processor<NullType, String>() { 
    public String process(NullType unused) { 
    ... 
    return result; 
    } 
} 

Am Я неправомерно используется намерение NullType здесь? Есть java.lang.Void или что-то еще более подходящее?

+0

* «Это тип выражения null» * ... поэтому он представляет, что вы хотите, чтобы он представлял ... где сейчас замешательство? – Tom

+0

@ Хорошо, возможно, что два экземпляра 'NullType' на самом деле не равны (так как это интерфейс) - поэтому они представляют собой« null », но« Objects.equals (aNullType, bNullType) == false', тогда как ' Objects.equals (null, null) == true'. –

+0

При работе с sdk android в этих случаях обычно используется тип Void. –

ответ

4

В этих ситуациях я предпочитаю Void, что делает допустимым только null.

NullType, с другой стороны, может быть создан.


В качестве любопытства it is possible to instantiate an object of type Void.

+0

Я согласен - вот почему: NullType предназначен для представления типа. Точно так же, как ArrayType (в том же пакете) не является массивом, NullType не является нулевым. Нормально использовать Void в подобных случаях, например Callable или Future guitarsteve

+0

Я использовал «Void» также в подобных ситуациях до сих пор, но у меня всегда было ощущение, что оно предназначено для обработки возвращаемых типов. –

Смежные вопросы