java中什么叫方法内部类,方法本地内部类在Java中提供了什么好处?

我刚刚阅读了SCJP书中关于方法局部内部类的章节,我真的很难想到它们的任何实际用途。

我一直有这样的印象:方法应该尽可能小,并且尽可能特定于它们的任务(正交性IIRC),所以即使引入最简单的内部类,也会创建出非常复杂的方法。

有人能为方法局部内部类推荐一个好的实用用法吗?到目前为止,我觉得我可能仅仅为了通过考试而理解它们,而不是为了在日常编码中使用它们。

干杯

它们通常用于实现回调方法。

到目前为止,我只使用过一次:我需要一个适合方法中临时散列映射的密钥类。

真实世界方法本地内部类用法:stackoverflow.com/a/14900700/82609

在大多数情况下(例如,对于动作侦听器、可运行文件等),您将使用匿名类而不是方法本地命名类。

但是有一件事是命名类可以做的,匿名类不能做的:实现多个接口,或者扩展类和接口。此外,还可以创建该类的多个对象(不使用循环)。

"此外,您可以创建这个类的多个对象(不使用循环)。"—当然可以。即使在定义类的方法的多个调用中,类仍然是相同的。

虽然这证明了为什么它可能存在(实现多个接口),但它并不表示实际用途。是否有理由在方法中声明类?我还没有看到任何开放JDK的例子

我想说更好的封装是有益的。

方法局部内部类在您尝试执行"函数"操作或将代码传递给另一个稍后要调用的对象时非常有用。在大多数情况下,像这样的类只被调用或使用一次,因此不需要在其他地方定义它并强迫读者去寻找它。Java的未来版本可能会为这些类型的内部类替换大多数使用"闭包"的用例。

常见的情况是编写调用其他方法或启动新线程的事件侦听器。

对于它,使用匿名类而不是方法本地命名类更好。

本地类允许从父类中取出逻辑并将其对象化。这会从不属于它的地方删除功能,并将其放入自己的类中。但是,如果这个新对象只需要很短的时间,只需要一个代码块的持续时间,又该怎么办呢?好吧,这就是当地的阶级适合的地方。

很少使用局部类(方法局部内部类)。当一个方法中需要任何重复的功能时,如果我们不想创建类级方法(可能是因为这个功能我们可能不需要方法之外的功能),例如,假设我们的代码(任何部分)中重复需要sum&mul方法opus方法),一种创建类级方法并在需要时调用它们的方法,但是如果这些方法不再需要在这个方法之外,在这种情况下,我们可以考虑创建一个本地内部类并在需要时访问它的sum方法,只在这个方法内,下面的示例

class Outer {

public void calculations() {

class Inner {

public int sum(int x, int y) {

System.out.println("sum :" + (x+y));

return x+y;

}

public int mul(int x, int y) {

System.out.println("multiplication :" + (x*y));

return x*y;

}

}

Inner i= new Inner();

//some code...

i.sum(10, 20);

//some code...etc

i.mul(30, 40);

i.mul(14, 12);

i.sum(10000, 20000);

//some other code...

}

}

public class TestClass {

public static void main(String[] args) {

new Outer().calculations();

}

}

我认为Runnable实现被传递到线程:

Thread t = new Thread(new Runnable() {

void run() {

...

}

});

这是匿名类,任何匿名类也是内部的。

但是runnable不是方法局部内部类(它是一个普通的匿名内部类)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值