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> { |
博客涉及Java、C/C++和人工智能相关内容,但具体内容缺失。Java和C/C++是常见编程语言,在人工智能领域有广泛应用。
3060

被折叠的 条评论
为什么被折叠?



