java接口字段编译了不需要的修饰符

时间:2013-07-17 18:13:47

标签: java interface modifiers

我宣布了以下界面:

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.
LOL是什么? “id”和“modified”不是“静态final”,我让我们看看已编译的.class文件(我在Java组件编辑器中检查过,并在eclipse中),真的!每次(通过eclipse或java无关紧要)在编译的类中,所有字段都将具有“静态最终”修饰符。但为什么呢?

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

...但它只是一半的解决方案,java只允许其中一个超类。

为什么用不合需要的修饰符编译我的界面?

2 个答案:

答案 0 :(得分:2)

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

如果你需要非静态的非最终成员,你应该有一个围绕界面的类。

答案 1 :(得分:0)

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

我们在接口中定义的所有字段隐式为public,static和final。再次,您在界面中分配了一个值,并尝试稍后更改,所以你不能这样做。