这是来自Oracle 的一篇关于我正在阅读的匿名类的文章:
如果您必须实现包含两个或多个方法的接口,则匿名类是理想的
如果你必须实现少于两个的方法,我认为这是理想的,因为你不需要创建更具体的命名类,但是如果你必须实现两个以上的方法将更加不可读。
我的问题是:为什么使用 2 个或更多方法实现匿名类是理想的?
这是来自Oracle 的一篇关于我正在阅读的匿名类的文章:
如果您必须实现包含两个或多个方法的接口,则匿名类是理想的
如果你必须实现少于两个的方法,我认为这是理想的,因为你不需要创建更具体的命名类,但是如果你必须实现两个以上的方法将更加不可读。
我的问题是:为什么使用 2 个或更多方法实现匿名类是理想的?
你把那句话断章取义了。看看紧接在前面的那句话:
因为
EventHandler<ActionEvent>
接口只包含一个方法,所以可以使用 lambda 表达式代替匿名类表达式。有关更多信息,请参阅Lambda 表达式部分。
(我强调)
将来你将能够使用 lambda 表达式而不是只有一个方法的匿名类,因此只有当你的接口有多个方法时,使用匿名类才有意义。
如果它有许多方法,可读性可能会受到影响,但是没有其他语言结构可以强制特定实现只能在代码中的一个点使用。
本文包含来自 JDK 8 的信息,在这种情况下,Lambda 表达式可用于实现单个函数接口,而不必使用匿名类。
因此 2+ 方法建议严格适用于 JDK 8,对于 7 及以下匿名类是单方法和多方法接口实现的唯一方法(好吧,在完整类之外)。
这可能是考虑到 Java 8(手指交叉)中用于单方法接口(即Lambda 表达式)的新简洁语法。如果接口确实只有一个方法,那将提供比匿名类更好的选择。