java接口(interface)字段编译不需要的修饰符

标签 java interface modifiers

我声明了以下接口(interface):

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;
}

在其他类中,我想设置一个实现此接口(interface)的对象,但出现编译错误:

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)int 编译的类的所有字段都将具有“static Final”修饰符。但为什么呢?

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

...但这只是解决方案的一半,java只允许一个父类(super class)。

为什么要在我的界面中添加不需要的修饰符?

最佳答案

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

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

关于java接口(interface)字段编译不需要的修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17707187/

相关文章:

java - 克里奥异常 : Unable to find class on Linux only

java - JgraphT 导出到点文件

java - 在java中,关于访问修饰符, "world"这个词是什么意思?

c# - 为什么 IsEnabled 是 ILogger 接口(interface)的一部分?

java - 'public static' 和 'static public' 之间的区别

java - 我应该在此代码示例中为变量赋予什么修饰符?

java - 如何将java项目转换为Maven项目或类似项目

java - 如何提高 Groovy 的性能?

java - 正则表达式匹配Java中字符串的开头和结尾

java - 如何调用嵌套接口(interface)的方法