What benefit do method-local inner classes provide in Java?
我刚刚阅读了SCJP书中关于方法局部内部类的章节,我真的很难想到它们的任何实际用途。
我一直有这样的印象:方法应该尽可能小,并且尽可能特定于它们的任务(正交性IIRC),所以即使引入最简单的内部类,也会创建出非常复杂的方法。
有人能为方法局部内部类推荐一个好的实用用法吗?到目前为止,我觉得我可能仅仅为了通过考试而理解它们,而不是为了在日常编码中使用它们。
干杯
在大多数情况下(例如,对于动作侦听器、可运行文件等),您将使用匿名类而不是方法本地命名类。
但是有一件事是命名类可以做的,匿名类不能做的:实现多个接口,或者扩展类和接口。此外,还可以创建该类的多个对象(不使用循环)。
我想说更好的封装是有益的。
方法局部内部类在您尝试执行"函数"操作或将代码传递给另一个稍后要调用的对象时非常有用。在大多数情况下,像这样的类只被调用或使用一次,因此不需要在其他地方定义它并强迫读者去寻找它。Java的未来版本可能会为这些类型的内部类替换大多数使用"闭包"的用例。
常见的情况是编写调用其他方法或启动新线程的事件侦听器。
本地类允许从父类中取出逻辑并将其对象化。这会从不属于它的地方删除功能,并将其放入自己的类中。但是,如果这个新对象只需要很短的时间,只需要一个代码块的持续时间,又该怎么办呢?好吧,这就是当地的阶级适合的地方。
很少使用局部类(方法局部内部类)。当一个方法中需要任何重复的功能时,如果我们不想创建类级方法(可能是因为这个功能我们可能不需要方法之外的功能),例如,假设我们的代码(任何部分)中重复需要sum&mul方法opus方法),一种创建类级方法并在需要时调用它们的方法,但是如果这些方法不再需要在这个方法之外,在这种情况下,我们可以考虑创建一个本地内部类并在需要时访问它的sum方法,只在这个方法内,下面的示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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(); } } |
号
我认为
这是匿名类,任何匿名类也是内部的。