将代码传递给方法以访问受保护的信息

问题描述 投票:0回答:1

我想编写一个方法来接收来自调用者的代码以从实例中提取信息。该方法将从几个地方调用,因此将其模块化并这样编写是有意义的:

private int doSomething(Function<ThisClass, int> getterForInt) {
  int[] exprStart = { -1 };

    SomeClass sc = new SomeClass() {

      @Override
      protected void doInternal() {
        // Here I have access to protected stuff of SomeClass:
        exprStart[0] = this.start;

        // This allows the lambda to access only public stuff of SomeClass:
        exprStart[0] = getterForInt.apply(this);
      }

    };

    // do stuff with sc
    :

    return exprStart[0];
}

注意

SomeClass
是第三方类,所以我不能简单修改它。

如上所述,存在一些访问限制,因此这会导致编译器错误,因为

start
protected
:

doSomething(sc -> sc.start);

有没有办法允许将代码传递到

doSomething()
,以便可以从
SomeClass
访问受保护的内容,或者我真的必须在每次使用时复制/粘贴
doSomething()
吗?我的意思是我可能可以使用反射并修改可读性(在本例中为
start
),但这并不直观。

java parameter-passing
1个回答
0
投票

问题不在

doSomething
内部,而是在调用
doSomething
的方法内部。如果该方法实际上是
SomeClass
子类的成员,那么您将能够在 lambda 中访问
start
。作为一种黑客,您可以创建一个带有初始化程序的匿名子类,该子类将立即执行:

private void myMethod() {
    new SomeClass() {
        {
            doSomething(sc -> sc.start);
        }
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.