0

有人面临这样的问题吗?

一些标有警告“该字段永远不会在本地读取”的字段:

在此处输入图像描述

但是当我禁止警告时,Eclipse 开始声称这是不必要的:

在此处输入图像描述

结果,我无法摆脱警告。

Eclipse SDK 3.6.2

编辑:

BlockBase 类是抽象的。但是向abstract类添加关键字并将构造函数可见性更改为protected不会改变任何内容。我猜想这种行为的真正原因是类市场是私有的,因此编译器假定应该从类可见性区域内部访问字段。它没有考虑到这些字段可能会从具有另一种可见性 ( public class DataBlock extends BlockBase) 的子项访问。

我将BlockBase可见性更改为protected,它解决了问题。我不喜欢将其更改为 public,因为它会导致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带有警告的声明市场:

该字段永远不会在本地读取

4

2 回答 2

4

也许你打算BlockBase成为一个abstract像这样的班级BaseAdapter

  • 如果您不打算声明一个BlockBase对象,blockBase = new BlockBase(widget);那么添加abstract到您的类定义并删除您的构造函数。编译器将了解您计划在子类中使用这些变量,并将删除警告。

  • 否则编译器是正确的,您应该删除这些变量,因为它们永远不会在BlockBase. (如果您打算在 中使用它们DataBlock,则将它们剪切并粘贴在那里,但它们对 没有意义BlockBase。)

于 2012-09-06T19:33:25.073 回答
0

在某些情况下,编译器会添加合成方法来模拟对嵌套/外部类字段的访问。也许这会混淆这里的支票。您应该能够通过将 Eclipse 编译器警告首选项“访问封闭类型的不可访问成员”设置为高于“忽略”的值来验证这是否起作用。

除此之外,我建议升级到 3.8 或 4.2,也许我们正在推测一个长期修复的错误。

于 2012-09-07T15:09:39.303 回答