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

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

我总是在这样的印象中,方法应该尽可能小和特定于他们的任务( Orthogonality IIRC),因此即使是最简单的内部类,也会创建一个重要且难以处理的方法。

任何人都可以建议方法本地内部类的一个很好的实际用法? 到目前为止,感觉好像我可能必须完全理解它们才能通过考试,而不是用于日常编码。

干杯

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

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

我想说更好的封装就是好处。

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

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

本地类允许从父类中取出逻辑并将其客观化。 这将从不属于的地方删除function并将其放入自己的类中。 但是,如果这个新对象仅在短时间内需要,仅在单个代码块的持续时间内怎么办? 嗯,这就是本地class级适合的地方。

我想到传递给Thread的Runnable实现:

 Thread t = new Thread(new Runnable() { void run() { ... } }); 

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

很少使用本地类(方法本地内部类)。 当在方法内部需要任何重复的function时,如果我们不想创建类级方法(可能是因为我们可能不需要在方法之外的这个function),例如,假设sum&mul方法是重复需要的话,它会很有用在我们的代码(任何特定方法)中,创建类级别方法并在需要时调用它们的一种方法,但是如果在这种方法之外不再需要这些方法,在这种情况下我们可能会考虑创建一个本地内部类并访问它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(); } }