2016-01-29 4 views
0

Да, я знаю, что есть другой вопрос, похожий, но моя проблема в том, что мои параметры являются объектами.Проверьте ошибку стиля. Атрибут параметра не разрешен.

public void serStuff(OBJ x, OBJ y) 

if (x== null) 
{ 
    x = ANOTHER_VALUE; 
} 
if(y == null) 
{ 
    y = ANOTHER_VALUE2; 
} 

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

+0

Вы уверены, что переменные не выходят за рамки? Это только изменяет их значение в функции 'serStuff' – Arc676

ответ

0

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

Но иногда это еще полезно, чтобы сделать это, например:

public void doSomething(String s){ 
    if (s == null){ 
     s = ""; 
    } 
    s.callSomeMethodsAvoidingNullPointerException(); 
} 

Если вы не можете изменить Checkstyle конфигурации, вы можете просто создать еще одну переменную:

public void doSomething(String s){ 
    String sNotNull = s; 
    if (sNotNull == null){ 
     sNotNull = ""; 
    } 
    sNotNull.callSomeMethodsAvoidingNullPointerException(); 
} 

это выглядит как-то неуклюжий. Я бы предпочел изменить конфигурацию, если этот шаблон встречается часто. Но это также может быть очень субъективным взглядом.

+0

Строка не' OBJ' i.e, она неизменна. OP может попытаться изменить свое поле. Используйте поле объекта по умолчанию. – user8

+0

Что вы подразумеваете под "String is not OBJ"? Конечно, строка является объектом и ведет себя как любой другой объект. Это может быть неизменным, но вы все равно можете назначить новое значение переменной. – exception1

0

Используйте локальную переменную, чтобы ее проверить. Нравится:

OBJ localX = (x == null) ? ANOTHER_VALUE : x; 

Затем обработайте новую переменную.

Значит, вы сделаете localX точкой для того же предмета или нового ANOTHER_VALUE.

Если вам нужно только проверить, не задан ли заданный параметр, вы можете использовать assert(x != null).

С другой стороны, если вам иногда необходимо убедиться, что параметр не будет изменен, используйте final. Это (примерно!) Эквивалент C const, компилятор «кусает» вас, если вы попытаетесь его изменить.

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