我的几乎所有课程都有这种方法。
max-height
在辅助类中访问此静态方法
//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);
}
});
}
我得到lint警告"静态成员被实例引用"访问。我不知道如何不使用"这个"这里。所以我有两个选择。
1)忽略棉绒警告
2)放弃"静电"在我的助手方法中。
哪个更好?或者提出第三种解决方案。
答案 0 :(得分:12)
警告表示您通过实例showInfoDialog
而不是通过类materialHelper
本身调用静态方法MaterialHelper
。这是“不好的”,因为它表明该方法实际上是一个依赖于实例中某个状态的实例方法。
解决方案是替换
materialHelper.showInfoDialog(...)
使用在代码中的任何地方
MaterialHelper.showInfoDialog(...)
答案 1 :(得分:4)
或提出第三种解决方案。
将materialHelper
替换为showInfoDialog()
所在的班级名称。根据您的描述,materialHelper
是此类的一个实例。
答案 2 :(得分:2)
E.g。 ,假设
public static YourClass {
//.. the other code
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);
}
});
}
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);
}
}
//somewhere
YourClass materialHelper = new YourClass();
所以
此方法showInfoDialog(MainActivity.this, iv, title, text);
是'静态方法'
这意味着:此方法是为此类的所有实例共享的(静态变量也是如此)。调用它的位置并不重要。这就是为什么lint说: “哦天哪,你为什么要用这个实例调用这个静态方法?它可能会改变其他实例中的共享值!小心!”。 Java会理解你的代码,但这是一个小错误(你的误解)。这就是为什么正确的解决方案是使用它:
YourClass.showInfoDialog(MainActivity.this, iv, title, text);
答案 3 :(得分:0)
用于:
import static com.yourcompany.yourproject.materialHelper.showInfoDialog;