有人面临这样的问题吗?
某些字段标有警告“该字段永远不会在本地读取”:
但是当我压制警告时,Eclipse开始宣称这是不必要的:
结果,我无法摆脱警告。
Eclipse SDK 3.6.2
编辑:
BlockBase类是抽象的。但是将abstract
关键字添加到类并将构造函数可见性更改为protected
并不会改变任何内容。我想这种行为的真正原因是类市场是私有的,因此编译器假定应该从类可见性区域内访问字段。它没有考虑到这些字段可以从具有另一种可见性(public class DataBlock extends BlockBase
)的子项访问。
我将BlockBase
的可见度更改为protected
,并且解决了问题。我不喜欢将其更改为公开,因为它会导致BlockBase
从父类外部可见,但更改protected
的可见性不会改变任何内容,因为我的父类不会没有继承的课程。
但无论如何,这种编译器行为是不正确的。
编辑2
- 或 -
如何重现问题
1。第一个文件:
public class testClass {
private abstract class x
{
public int theProblem;
}
public class y extends x
{
}
}
2。第二档:
public class anotherClass {
public void accessToTheProblem()
{
testClass.y a = (new testClass()).new y();
a.theProblem = 5;
Log.i("TEST", "See, I can read theProblem: " + a.theProblem);
}
}
在Eclipse SDK 3.6.2下,您将看到带有警告的theProblem
声明市场:
该字段永远不会在本地读取
答案 0 :(得分:4)
也许您打算BlockBase
成为像BaseAdapter
这样的abstract
类?
如果您不打算使用BlockBase
声明blockBase = new BlockBase(widget);
对象,请将abstract
添加到类定义中并删除构造函数。编译器将了解您计划在子类中使用这些变量,它将删除警告。
否则编译器是正确的,您应该删除这些变量,因为它们永远不会在BlockBase
中使用。 (如果您打算在DataBlock
中使用它们,请将它们剪切并粘贴在那里,但它们对BlockBase
毫无意义。)
答案 1 :(得分:0)
在某些情况下,编译器会添加合成方法来模拟对嵌套/外部类字段的访问。也许这会混淆支票。您应该能够通过将Eclipse编译器警告首选项“访问封闭类型的不可访问成员”设置为高于“忽略”的值来验证它是否起作用。
除此之外,我建议升级到3.8或4.2,也许我们正在推测一个长期修复的错误。