gpt4 book ai didi

java - 具有定义的匿名类实例化 - 覆盖 protected 方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:07:50 24 4
gpt4 key购买 nike

假设我有课:

class A {
protected int x; // no public getter, setter
}

现在我想扩展类 A,以覆盖“x”变量。答案是:

public class SomeClass {
someMethod() {
A extendedClass = new MyExtension(5);
}

class MyExtension extends A {
public MyExtension(int x) {
super.x = x;
}
}
}

我的问题是:有没有可能在不单独定义嵌套类的情况下做到这一点?我的意思是这样的

    someMethod() {
A extendedClass = new A() {
// here do something like super.x = 5;
}
}

我试过 Calling newly defined method from anonymous class但它不会让我实例化 A 类。我也不想使用反射。

我只是不想定义嵌套类只是为了覆盖一个属性。问题的根源是 Spring 集成 ImapMailReceiver,我想在其中覆盖任务调度程序。如下所示:

    final ImapMailReceiver imapMailReceiver = new ImapMailReceiver() {
super.setTaskScheduler(MYTASKSCHEDULERHERE);
}

最佳答案

您的 new A() { ... } 仍然只是在定义一个新类。因此,您不能简单地将任何语句放在大括号之间,只能在其中放置字段、方法和嵌套类型声明,但不允许构造函数。您可以改为添加实例初始化器:

A extendedClass = new A() {
{
x = 5;
}
}

关于java - 具有定义的匿名类实例化 - 覆盖 protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51893423/

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