0

我声明了以下接口:

public interface SQLSyncAble
{
    boolean modified = true;
    long id = -1;

    static HashMap<String,SQLAction> SQLModifiers = new HashMap<String,SQLAction>();
    static Field[] SQL_Object_Fields = null;
    static DataType[] TransferDataTypes = null;
}

在其他类中,我想设置一个实现此接口的对象,我得到编译错误:

someobject.id = 10  // The final field SQLSyncAble.id cannot be assigned.
                    //The static field SQLSyncAble.id should be accessed in a static way.

笑什么?“id”和“modified”不是“static final”,我让查看编译后的 .class 文件(我在 Java 汇编编辑器和 Eclipse 中检查过),真的!每次(无论是 eclipse 还是 java)在编译的类中,所有字段都将具有“static final”修饰符。但为什么?

如果我将此接口修改为“抽象类”,问题会立即消失。

...但这只是解决方案的一半,java只允许超类之一。

为什么要使用不需要的修饰符来遵守我的界面?

4

2 回答 2

2

根据定义,接口的所有字段都标记为static final

如果您需要非静态、非最终成员,则应该有一个围绕接口的类。

于 2013-07-17T18:14:59.963 回答
0

初始化后,您永远无法更改最终变量。

我们在接口中定义的所有字段都是隐式公共的、静态的和最终的。再次,您在界面中分配了一个值,您稍后尝试更改,所以您不能这样做。

于 2013-07-17T18:17:14.803 回答