gpt4 book ai didi

java - java访问问题

转载 作者:行者123 更新时间:2023-11-29 04:03:29 25 4
gpt4 key购买 nike

我正在使用第 3 方框架,结果我需要将它的一些对象包装为我的一个类的委托(delegate)。

class Foo { // 3rd party class.
protected void method() {}
}

class FooWrapper extends Foo {
private Foo mDelegate;

public FooWrapper(Foo inDelegate) {
mDelegate = inDelegate;
}

protected void method() {
mDelegate.method(); // error can't access protected method() of mDelegate
}
}

那么问题来了。我需要将此方法委托(delegate)给内部对象,但它 protected ,因此不可访问。

关于解决这个特定问题的方法有什么想法吗?这是针对 Java 1.3 的。

最佳答案

为什么要构建一个单独的 Foo 实例? FooWrapper 已经是一个 Foo。

class Foo {
protected void method() {}
}

class FooWrapper extends Foo {

protected void method() {
super.method();
}
}

编辑:如果你真的必须有单独的实例,一种方法(虽然有点难看)是使用反射:

public class Foo {

protected void method() {
System.out.println("In Foo.method()");
}
}

public class FooWrapper extends Foo {

private Foo foo;

public FooWrapper(Foo foo) {
this.foo = foo;
}

public void method() {
try {
Method m = foo.getClass().getDeclaredMethod("method", null);
m.setAccessible(true);
m.invoke(foo, null);

} catch (Exception e) {
e.printStackTrace();
}
}
}

Edit2:根据您在下面的评论,有两个 Foo 子类,一个只提供 protected 方法的公共(public)版本,另一个覆盖所有重要方法。第一个看起来和行为完全像 Foo,第二个可以做任何你需要做的事情:

public class Foo {

protected void method() {
System.out.println("In Foo.method()");
}
}

public class DelegateFoo extends Foo {

public void method() {
super.method();
}
}

public class FooWrapper extends Foo {

private DelegateFoo foo;

public FooWrapper(DelegateFoo foo) {
this.foo = foo;
}

public void method() {
foo.method();
/* extra logic here */
}
}

关于java - java访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1861762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com