通过实例引用访问静态成员的最佳解决方案

see*_*ess 5 java static android dialog

我几乎在所有班级都有这种方法.

//listener - info
private void clickInfoListener(final ImageView iv, final int title, final int text){
    iv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            materialHelper.showInfoDialog(MainActivity.this, iv, title, text);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

在辅助类中访问此静态方法

public static void showInfoDialog(Context context, final ImageView iv, final int title, final int text){
    iv.setImageResource(R.drawable.ic_info_touched);
    //
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setCancelable(true);
    builder.setTitle(title);
    builder.setMessage(text);
    builder.setPositiveButton(R.string.gotIt, null);
    builder.show();
    //
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            iv.setImageResource(R.drawable.ic_info_primary);
        }
    }, 25);
}
Run Code Online (Sandbox Code Playgroud)

我得到了"静态成员被实例引用访问"的lint警告.我不知道怎么不在这里使用"这个".所以我有两个选择.

1)忽略棉绒警告

2)在我的帮助方法中删除"静态".

哪个更好?或者提出第三种解决方案.

Tod*_*ell 13

警告是说你showInfoDialog通过实例materialHelper而不是通过类MaterialHelper本身调用静态方法.这是"坏",因为它表明该方法实际上是一个依赖于实例中某个状态的实例方法.

解决方案是更换

materialHelper.showInfoDialog(...)
Run Code Online (Sandbox Code Playgroud)

你的代码中到处都是

MaterialHelper.showInfoDialog(...)
Run Code Online (Sandbox Code Playgroud)