java - Java中的本地内部类
问题描述
对于下面的代码示例,当我们执行代码时,它将打印:
来自本地内部类的实例方法
现在,如果我只想执行本地内部类方法 m2() 并希望输出为:
来自本地内部阶层
class A {
void m1() {
class B {
void m2() {
System.out.println("from local inner class");
}
}
System.out.println("from instance method");
B b = new B();
b.m2();
}
public static void main(String[] args) {
A a = new A();
a.m1();
}
}
当绝对需要本地内部类时,究竟是什么用例,否则某些功能可能无法实现。
解决方案
我看不到您在做什么,也许您想将方法的创建与方法的调用分开,将所有实现细节隐藏在内部类中?如果是这样怎么办......
首先创建一个接口,这样你就知道你正在访问什么类型(比反射更整洁)
interface X {
void m2()
}
现在方法 m1() 返回一个类实现接口的实例
class A {
X m1() {
class B {
void m2() {
System.out.println("from local inner class");
}
}
B b = new B();
return b;
}
public static void main(String[] args) {
A a = new A();
// call m1() to get an instance of interface X
X x = a.m1();
// invoke method on interface instance
x.m2()
}
}
这将方法的创建(包装在一个类中,认为是“函子”)与方法的调用分开。
推荐阅读
- mongodb - 将备份从容器导出到主机
- python - 如何在不发生事件的情况下结束 SSEClient?
- php - mvc网站中的静态和非静态方法
- c - Linux C Programming,尝试写:实现FILE系统模仿
- visual-studio - 警告 C26812:枚举类型 VkResult 没有作用域。更喜欢枚举类而不是枚举
- request - Odoo 14.0 无法公开路由
- javascript - PHP 自动回显带有 onclick 的标签
- ios - 如何在 iOS 中自动填充地址?
- arm - 在运行时 STM32F4 使用 HAL 从 SPI Slave 更改为 Master
- spreadsheet - 谷歌电子表格隐藏#N/A