java接口字段编译不需要的修饰符
Posted
技术标签:
【中文标题】java接口字段编译不需要的修饰符【英文标题】:java interface fields compiled undesirable modifiers 【发布时间】:2013-07-17 18:13:46 【问题描述】:我声明了如下接口:
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只允许超类之一。
为什么在我的界面中添加了不受欢迎的修饰符?
【问题讨论】:
通过显示的代码,您可能希望拥有一个抽象类,而不是接口。 【参考方案1】:根据定义,接口的所有字段都标记为static final
。
如果您需要非静态、非最终成员,则应该有一个围绕接口的类。
【讨论】:
看起来我必须使用抽象类,但是接口静态最终中的所有字段是什么原因?【参考方案2】:在初始化后,您永远无法更改最终变量。
我们在接口中定义的所有字段都是隐式公共的、静态的和最终的。再次,您在界面中分配了一个值,您稍后尝试更改,所以您不能这样做。
【讨论】:
以上是关于java接口字段编译不需要的修饰符的主要内容,如果未能解决你的问题,请参考以下文章