J2SE 5.0 Generic应用
J2SE 5.0 Generic应用一:类型安全的functor
一、简介函数式编程是非常常用和非常重要的一种编程范式,有的语言直接提供支持,C++则通过()运算符重载和模板提供了还算灵活的支持,而Java中的函数式编程则由于语言本身的局限没有得到广泛应用,Apache Commons Functor 项目是一个正在开发中的函数式编程库,但目前看来并不是类型安全的;J2SE 5.0提供了有限的generic能力,除了用于Collection之外,类型安全的functor也是其用武之地,已有一个开源项目Generic Algorithms for Java开始了这方面的工作 二、示例
public interface UnaryFunction<R, P> { public interface UnaryPredicate<T> { public interface UnaryProcedure<T> {
public interface BinaryFunction<R, T, S> { public interface BinaryPredicate<T, S> { public interface BinaryProcedure<T, S> {
public interface Filter<T> extends UnaryFunction<T, T>{
public static <Destination, Source> List<Destination> transform(Collection<Source> source, UnaryFunction<Destination, Source> transformer){
public class And<T> implements UnaryPredicate<T>, Serializable{ public class Or<T> implements UnaryPredicate<T>, Serializable{ public class Not<T> implements UnaryPredicate<T>, Serializable{ 三、问题1,interface vs. functor functor在Java里就是一个“只包含一个method的接口”,在使用接口的大部分地方都可以使用functor,优点是低侵入性(不需要实现接口),缺点是无法访问类的私有信息;鉴于目前Generic的实现,涉及到Java动态特性(序列化/反序列化,反射等)的模块,优先使用interface,其它场合可酌情使用泛化的functor 2,function vs. functor 只在内部使用的,做成function,在多处使用的,做成functor 3,classic vs. modern 传统分支控制语句if,else,switch在面向对象的程序中,可使用“子类化”大面积的消除 传统循环控制语句for,do while也该使用“algorithm + functor”大面积消除了
|
J2SE 5.0 Generic应用二:类型安全的多返回值
一、简介out参数和ref参数提供了同一个函数返回多个值的途径,C++和C#分别用引用和out、ref关键字支持,Java中一般用数组或集合解决这个问题;Generic提供了另外一种途径,但并不比数组来得方便实用,所以这里仅仅是为了泛型而泛型,没有实际价值;另外pair<F, S>等技术也常被使用,其实就是map.entry 二、示例
public class Out<T> {
public class Ref<T> {
public class Pair<First, Second> {
|
上一篇: (摘)编程经验分享(四)
推荐阅读
-
2.第一个ASP.NET MVC 5.0应用程序
-
犀牛5.0怎么使用VR渲染插件替代模型的应用?
-
J2SE入门(六) static五大应用场景
-
犀牛5.0怎么使用VR渲染插件替代模型的应用?
-
轻松部署 .NET 5 应用程序,这个指南一定不要错过 WPFDevexpress.net 5.0c#
-
轻松部署 .NET 5 应用程序,这个指南一定不要错过 WPFDevexpress.net 5.0c#
-
今天对J2ME学习的体会 J2SE企业应用网络应用交通游戏
-
thinkPHP5.0框架应用实现请求生命周期的具体分析
-
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
-
J2SE入门(六) static五大应用场景