设置Android ActionBar颜色时出现"字段可以转换为局部变量"消息

Mac*_*ver 31 java android android-appcompat android-actionbar android-support-library

设置操作栏的颜色后,actionBarColorin private String actionBarColor = "#B36305";会突出显示为黄色,并且由于某种原因会返回警告.可以做些什么来摆脱这个警告?

字段可以转换为局部变量

public class MainActivity extends AppCompatActivity {

    private String actionBarColor = "#B36305";

    private int getFactorColor(int color, float factor) {
        float[] hsv = new float[3];
        Color.colorToHSV(color, hsv);
        hsv[2] *= factor;
        color = Color.HSVToColor(hsv);
        return color;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_activity_main);

        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null) {
            actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(actionBarColor)));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

iOS*_*Dev 51

如果您知道将使用变量,请添加到班级的顶部:

@SuppressWarnings("FieldCanBeLocal")

  • 这就是我需要的.我有一个领域.它_could_已被转换为局部变量,但它在循环内使用,我不想在每次执行循环时反复重新初始化它 (3认同)
  • 只需注意,如果将字段添加到使用弱引用管理其容器的对象,则通常需要这样做.如果转换为局部变量,它将被垃圾收集. (2认同)

Mic*_*nic 35

警告告诉你的是,它actionBarColor不应该是一个全局变量(即一个字段),因为它只用在一个方法(onCreate)中.这是一个很好的建议:您应该始终最小化变量的范围,因为它提高了可读性并减少了编程错误的可能性.

要摆脱警告,请通过在onCreate以下内容中声明变量来解决问题:

final String actionBarColor = "#B36305";

if(actionBar != null) {
    actionBar.setBackgroundDrawable(
        new ColorDrawable(Color.parseColor(actionBarColor)));
}
Run Code Online (Sandbox Code Playgroud)

  • 常数呢?我喜欢在班级顶部声明它们。 (2认同)