TL;TD 在 Java 8 中,接口(interface)默认方法是否可以访问实例变量?
例如:
public interface Foo{
default getBazModified(){
return baz * 2;
}
}
public class Bar implements Foo {
int baz;
...
}
我知道这听起来有些荒谬,但是有没有办法在 Java 8 中做类似的事情?
或者唯一的方法是拥有一个实现 Foo 的抽象类,该类将声明实例变量 baz 并具有 getBazModified() 的默认实现?
最佳答案
接口(interface)不会“看到”其实现的实例字段。这不是特定于接口(interface)的,任何父类(super class)型都不知道其子类型的特定字段(或任何与此相关的成员类型)。
在这种情况下,您的解决方案是在接口(interface)中声明一个抽象 getter 方法,并使用它来读取子类的属性:
public interface Foo{
default int getBazModified(){
return this.getBaz() * 2;
}
int getBaz();
}
并让具体类实现 getter:
public class Bar implements Foo {
int baz;
public int getBaz() {return this.baz;}
}
关于java - 在Java 8中,接口(interface)默认方法可以访问实例变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54578089/