我有一个接口和一个实现接口方法的类,但没有使用implements
关键字来实现。因此我使用as
- 强制类的实例。到目前为止,这已经按预期工作了,但是toString()
没有在代理上调用而不是实际实例。
考虑以下示例:
class CoercionToString {
public static main(String[] args) {
A a = new A();
a.foo();
println a;
B b = new A() as B;
b.foo();
println b;
}
}
class A {
void foo() {
println "foo"
}
@Override
public String toString() {
return "bar";
}
}
interface B {
void foo()
}
这会产生以下输出:
foo
bar
foo
A1_groovyProxy@197d671
我希望能够覆盖toString()
,但与其他方法不同,它不会委托给实际对象。有没有办法让代理对象以这种方式运行?
答案 0 :(得分:0)
这适用于我使用trait而不是intefrace:
class CoercionToString {
public static main(String[] args) {
B b = new A() as B;
b.foo();
println b;
println b.toString();
}
}
class A {
void foo() {
println "foo"
}
@Override
public String toString() {
return "bar";
}
}
trait B {
public abstract void foo()
public abstract String toString()
}