SonarQube: изменяемые члены не должны храниться или возвращаться напрямую - PullRequest
0 голосов
/ 20 декабря 2018

Пока это мой код:

public class RestApplication extends Application {

  private final Set<Class<?>> resourceSet;
  public RestApplication() {
    this.resourceSet = new HashSet<Class<?>>();
    resourceSet.add(PCardController.class);
    resourceSet.add(PricingController.class);
    resourceSet.add(TransactionFeedController.class);
    initializeMaps();
  }

  @Override
  public Set<Class<?>> getClasses() {
    return resourceSet;
    // ...
  }   // Added by edit!
  // ...
}     // Added by edit!

SonarQube говорит, что возвращение копии - это набор ресурсов.
Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

В качестве альтернативы сделать результат неизменным;менее приятное использование, лучшая площадь и скорость.

@Override
public Set<Class<?>> getClasses() {
    return Collections.unmodifiableSet(resourceSet);
}
0 голосов
/ 13 июня 2019

Эта ошибка вызвана тем, что в некоторых ситуациях Java возвращается по ссылке.Вот тест для демонстрации передачи по ссылке.List.size () возвращает 3.

List<String> list=new ArrayList<String>();;

List<String> getList(){
    list.add("hello");
    return list;
}
@Test
public void run(){
    getList().add("hey");
    List<String> list = getList();
    list.size();
}
0 голосов
/ 20 декабря 2018

вы можете вернуть новый HashSet:

@Override
public Set<Class<?>> getClasses() {
    return new HashSet<>(resourceSet);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...