我知道 Inteface 中的所有字段都是隐式的static 和 final。这在 Java 8 之前是有道理的。
但是随着默认方法的引入,接口也具备了抽象类的所有能力。因此非静态和非最终字段也是必要的。
但是当我尝试正常声明一个字段时,它默认变为静态和最终的。
有没有办法在 Java 8 的 Interface 中声明一个非静态和非最终字段。
还是我完全误解了这里的东西???
我知道 Inteface 中的所有字段都是隐式的static 和 final。这在 Java 8 之前是有道理的。
但是随着默认方法的引入,接口也具备了抽象类的所有能力。因此非静态和非最终字段也是必要的。
但是当我尝试正常声明一个字段时,它默认变为静态和最终的。
有没有办法在 Java 8 的 Interface 中声明一个非静态和非最终字段。
还是我完全误解了这里的东西???
Java 接口中的所有字段都是public static final
.
即使添加了默认方法,在接口中引入可变字段仍然没有任何意义。
由于接口演变的原因,添加了默认方法。您可以向接口添加新的默认方法,但仅当实现使用接口中已定义的方法时才有意义:
public interface DefaultMethods {
public int getValue();
public default int getValueIncremented() {
if (UtilityMethod.helper()) { // never executed, just to demonstrate possibilities
"string".charAt(0); // does nothing, just to show you can call instance methods
return 0;
}
return 1 + getValue();
}
public static class UtilityMethod {
public static boolean helper() {
return false;
}
}
}
我强烈不建议这样做。请改用抽象类。但是如果你真的需要它,你可以用一些包装类做一些变通方法。这是一个例子:
public interface TestInterface {
StringBuilder best = new StringBuilder();
default void test() {
best.append("ok");
System.out.print(best.toString());
}
}
不——不幸的是,在 java 8 中,你不能在接口中没有 public static final 字段。
但我希望将来这将被添加到语言中。
Scala 允许使用非静态字段的接口,这为代码重用和组合提供了比 Java 8 中更多的可能性