sonarQube - 使字段瞬态或可序列化

时间:2016-03-15 17:20:45

标签: java serialization sonarqube

我正在尝试解决由Jenkins的sonarQube插件报告的以下违规行为:“make'update'transient或serializable。”。重力:关键,标记:序列化。

我有以下共享界面

public interface MPUpdate {

    void apply( SoapService svc, byte[] jerseyClientResp ) throws MPException ;
}

以下枚举是应用程序逻辑的入口点

public enum DomainResource implements MPUpdate {

    PROGRAMMES( new ProgrammeUpdate() ),
    PRODUCTIONS( new ProductionUpdate() );
    // more enums

    private DomainResource( MPUpdate update ) {
        this.update = update;
    }

    private final MPUpdate update; // Sonar: make "update" transient or serializable, priority: critical, tag: serialization

    @Override
    public void apply( SoapService svc, byte[] jerseyClientResp ) throws MPException {
        update.apply( svc, jerseyClientResp );      
    }
}

通过枚举

初始化的逻辑单位之一
public class ProgrammeUpdate implements MPUpdate {

    private final ResponseConverter<ProgrammeDto> responseConverter = new ResponseConverter<>( ProgrammeDto.class );

    @Override
    public void apply( SoapService svc, byte[] jerseyClientResp ) throws MPException {

        // APPLICATION LOGIC
    }

}

最后这就是它的用法:

...
String levelFromUrl = getLevel(); // eg. "programmes"
MPUpdate resource;
resource = DomainResource.valueOf( levelFromUrl.toUpperCase() ); 
...
resource.apply( soapService, jerseyClientOutcome );
...

有任何帮助吗?枚举的使用是否提高了日志记录的性能?

非常感谢

1 个答案:

答案 0 :(得分:4)

您不需要它可序列化。你应该把它标记为瞬态。使用简单名称字符串序列化枚举,因此其他字段无关紧要。只是将该字段标记为瞬态以使声纳快乐(尽管该工具本身应该能够确定这种情况)。