诊断Java代码: 轻松掌握 Java 泛型,第4部份[Java编程]
本文“诊断Java代码: 轻松掌握 Java 泛型,第4部份[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
至此,在这个谈论 JSR-14 和 Tiger 中泛型范例的微型系列中,我们已经探究了:
泛型范例及被计划成支持它们的行将公布的功效
基本范例、受约束的泛型以及多态办法上的限制
几个强加给这些 Java 扩大的限制
这些扩大语言的编译器所用的实现战略若何使这些限制成为必须
在泛型范例中增添对“裸”范例参数的 new 操作的支持所带来的影响
本月,我们将探究在可以处理 mixin(大概被盼望是泛型范例中最强盛的功效)之前需求先办理的问题,以此来完毕对 Java 语言中泛型范例的谈论.
mixin vs 包装
mixin 是由其父类参数化的类.比方,请考虑以下这个泛型类,它担当了它本身的范例参数:
class Scrollable<T> extends T {...}
类 Scrollable 的目的是要向 GUI 窗口小部件嵌入增添可转动性所必须的功效性.这个泛型类的每个利用城市担当一个差别的父类.比方, Scrollable<JTextPane> 是 JTextPane 的子类,而 Scrollable<JEditorPane> 是 JEditorPane 的子类.比较这种嵌入功效的办法和 Java Swing 库中现有的功效性,在这个库中,假如我们想使 JComponent 是可转动的,必须将其“包装”在 JScrollPane 中.
包装不但需求增添拜候被包装类的功效的转发办法,并且它还禁止我们在需求被包装对象的实例的上下文中利用由此产生的可转动对象(比方,我们不能将 JScrollPane 传送到需求 JTextPane 的实例的办法中).通过 Scrollable 的父类将其参数化,在担当多个超类时,我们就可以保持对触及转动的功效的单点掌握.这样可以利用 mixin 让我们重新得到多重担当性的某些强盛功效,而又没有附带非常.
在上面的示例中,我们乃至可以对范例参数施加约束以禁止它用于不得当的上下文中.比方,我们大概想使该范例参数强迫为 JComponent 的子类:
class Scrollable<T extends JComponent> extends T {...}
那么我们的 mixin 只能担当 GUI 组件.
mixin 和泛型类:完善组合
普通,mixin 作为独立语言功效部件增添到某种语言中,就象 Jam 中的那样.但是归并 mixin 以作为泛型范例系统的一部份很吸惹人,几近可以说魅力无穷.缘由是:mixin 和泛型类都能被认为是将现有类映射到新类的 函数.
泛型类可被视为将它们的参数映射成新实例化的函数.mixin 可被视为将现有类映射成新子类的函数.通过利用泛型范例归并 mixin,我们能办理别的 mixin 公式的很多关键限制.
在 Java 语言的 Jam 扩大中,mixin 的超类范例没闻名称;我们就不能在 mixin 主体中引用它.这一限制会疾速惹起一连串各种别的问题.比方,在 Jam 中,禁止程序员将 this 作为参数传送给办法;无法对这样的调用举行范例查抄.这一限制的影响极大,因为很多最常见的计划情势都要依靠于可以将 this 作为参数传送.
请考虑拜候者情势,此顶用 for 办法为复合层次构造中的每个类都定义了拜候者类.普通被拜候的类包含 accept 办法,它采取拜候者并传送 this 来调用该拜候者的办法.因此,在 Jam 中,拜候者情势不能和 mixin 一同利用.
将 mixin 明确表述为泛型类,我们就始终有父类的句柄,它是该类担当的范例参数.比方,我们可以将 Scrollable 的父类引用为范例 T .后来果是,在答应将 this 作为范例参数传送时没有任何根本性的艰难.
但是,将 mixin 明确表述为泛型范例时有别的一些明显的艰难.为了让您初步领会大概产生的某些艰难,我们将谈论几个突出的艰难以及一些大概的办理筹划.
以上是“诊断Java代码: 轻松掌握 Java 泛型,第4部份[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |