java - 具有定义的匿名类实例化 - 覆盖受保护的方法
问题描述
假设我有课:
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;
}
}
我尝试从匿名类调用新定义的方法,但它不会让我实例化 A 类。我也不想使用反射。
我不想定义嵌套类只是为了覆盖一个属性。问题的根源是 Spring-integration ImapMailReceiver,我想在其中覆盖任务调度程序。如下所示:
final ImapMailReceiver imapMailReceiver = new ImapMailReceiver() {
super.setTaskScheduler(MYTASKSCHEDULERHERE);
}
解决方案
您new A() { ... }
仍然只是定义一个新类。因此,您不能简单地将任何语句放在大括号之间,只有字段、方法和嵌套类型声明可以放在那里,但不允许使用构造函数。您可以添加一个实例初始化器:
A extendedClass = new A() {
{
x = 5;
}
}
推荐阅读
- git - 安装 scala 2.12.2 和 Lightbend Activator 是什么意思?
- python - 将嵌套列表和字典转换为 Dataframe?
- python-3.x - 如何使用 Python Ray 在不耗尽内存的情况下并行处理大量数据?
- css - 动画固定元素到视口的中心
- powershell - GUI-button to exit loop, Move-Item Job
- android - Flutter Scaffold 允许子系统 Navigation Bar 后面
- php - 如何在 PHP 中为验证码生成添加失真和编辑字体?
- git - Git Checkout - npm run watch - 没有任何改变
- angular - Angular 6:如果“无法匹配任何路线”移动到其他组件
- android - 对于语言环境“ar”(阿拉伯语),还应定义以下数量:少、多、二、零