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



我声明了以下接口:

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"one_answers"modified"不是"static final",我看到了编译后的.class文件(在Java assemly编辑器和eclipse中检查im),真的!每次(无论是eclipse还是java)在composed类中int时,所有字段都会有"static final"修饰符。但为什么呢?

如果我将这个接口修改为"抽象类",问题就会立即消失。

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

为什么用不需要的修饰符修改我的接口?

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

如果您需要非静态、非最终成员,那么应该在接口周围有一个类。

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

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

相关内容

  • 没有找到相关文章

最新更新