SonarQube:可变成员不应存储或直接返回

时间:2018-12-20 10:29:28

标签: java spring spring-mvc sonarqube set

到目前为止,这是我的代码:

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 :(得分:1)

您可以返回一个新的HashSet:

@Override
public Set<Class<?>> getClasses() {
    return new HashSet<>(resourceSet);
}

答案 1 :(得分:0)

或者使结果不可修改;不太好的用法,更好的占用空间和速度。

@Override
public Set<Class<?>> getClasses() {
    return Collections.unmodifiableSet(resourceSet);
}

答案 2 :(得分:0)

此错误是因为在某些情况下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();
}