TL; TD在Java 8中,接口默认方法是否可以访问实例变量?
例如:
public interface Foo{
default getBazModified(){
return baz * 2;
}
}
public class Bar implements Foo {
int baz;
...
}
我知道这听起来很麻烦,但是在Java 8中有没有办法做类似的事情?
还是唯一的方法是拥有一个实现Foo的抽象类,该类将声明实例变量baz并具有getBazModified()的默认实现?
接口不会“看到”其实现的实例字段。这不是特定于接口的,任何超类型都不知道其子类型的特定字段(或与此有关的任何成员类型)。
在这种情况下,您的解决方案是在接口中声明一个抽象的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;}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句