我声明了以下接口:
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
。
如果您需要非静态、非最终成员,那么应该在接口周围有一个类。
初始化最终变量后,您永远无法更改它。
我们在接口中定义的所有字段都隐式公开、静态和最终。再一次,你在接口中被分配了一个值,你稍后试图更改,所以你不能这样做。