Удаление предупреждения компилятора из вызова метода, посоветуйте необходимый - PullRequest
1 голос
/ 27 сентября 2011

Как часть моего класса Utils, у меня есть оба

public static boolean isStringEmptyOrNull(String... s) {

При тестировании на нулевое условие

assertTrue(Utils.isStringEmptyOrNull(null));

I get " Аргумент типа null должен быть явно приведен к String [] для вызова метода varargs isStringEmptyOrNull (String ...) из типа Utils. В качестве альтернативы он может быть приведен к String для varargs вызов"предупреждение.

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

Есть ли способ удалить это предупреждение без изменения сигнатуры метода?

Ответы [ 5 ]

2 голосов
/ 27 сентября 2011

Вы, вероятно, должны проверить оба этих случаев:

assertTrue(Utils.isStringEmptyOrNull(new String[] { null }));
assertTrue(Utils.isStringEmptyOrNull((String[]) null));

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

(Для вас очевидно, какие из этих вызовов вы имели в виду без актерского состава? Для меня это не очевидно ... Я должен был бы проверить это.)

1 голос
/ 27 сентября 2011

Хорошо, это предупреждение есть по причине: когда вы вызываете ваш метод с нулевым аргументом, так как нулевой является всем и любым типом в Java (включая Array), компилятор фактически не будет знать, вызываете ли вы метод var-argsс массивом или не массивом объекта (каждый из которых обрабатывается по-разному, когда используются аргументы var-args).Что вы можете сделать, так это аннотировать метод с помощью SuppressWarnings («Все»), а затем проверять на нулевое значение, прежде чем делать что-либо с аргументом (ами)

1 голос
/ 27 сентября 2011

Вы можете указать компилятору игнорировать предупреждение, используя @SuppressWarnings("all").

1 голос
/ 27 сентября 2011

Если вы пытаетесь имитировать способ, которым клиент вашей библиотечной функции будет вызывать ваш код, вы должны воспользоваться тем фактом, что они не будут вызывать этот конкретный метод с литералом «ноль» (какой в ​​этом смысл?)

Вместо этого они передадут некоторую переменную или выражение.Так как это так, вы можете сделать что-то вроде этого и избежать каста:

String nullString = null;
assertTrue(Utils.isStringEmptyOrNull(nullString));
0 голосов
/ 27 сентября 2011

Измените свой тест так:

String nullString = null;
assertTrue(Utils.isStringEmptyOrNull(nullString));

Довольно любопытно, почему вы используете метод vararg для этого, во-первых, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...