作者归档

泛型中? super T和? extends T的区别

原文链接          李璟(jlee381344197@gmail.com)

经常发现有List<? super T>、Set<? extends T>的声明,是什么意思呢?<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。

阅读全文

为何从10开始到99连续相乘会得到0?

原文链接  译者: 李璟(jlee381344197@gmail.com)

这是一块非常简单的Java代码片段:

[code lang=”java”]
public class HelloWorld{

public static void main(String []args){

int product = 1;

for (int i = 10; i <= 99; i++) {

product *= i;

}

System.out.println(product);

}

}
[/code]

为什么得出的结果是0呢?

阅读全文

嵌入Groovy

原文链接  译者: 李璟(jlee381344197@gmail.com)

(本站正在翻译groovy系列文章,有兴趣同学可以加入我们)

Groovy就其本身而言,在不同的场景下都算是一门非常不错的编程语言,特别是在与Java混用的环境下,Groovy显得更加强大。出于这种考虑,Groovy被设计成非常轻量级,并且易于嵌入到任何Java应用系统中。

目前主要有3种方法将Groovy与Java集成起来,细节会在下文中讨论。

还有一种可选方案是,如果你确实需要使用其他脚本语言,可以利用Bean Scripting Framework将任何脚本语言集成到你的Java代码中(虽然我们难以想象这么做的原因)。

阅读全文

采用Java 8中Lambda表达式和默认方法的模板方法模式

原文链接 作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com)

模板方法模式是“四人帮”(译者注:Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides)所著《Design Patterns book》一书中所描述的23种设计模式其中的一种,该模式旨在:

“Define the skeleton of an algorithm in an operation, deferring some steps to subclasses.

TemplateMethod lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure”。

即模板方法定义一个算法的架构,并将某些步骤推迟到子类中实现。模板方法允许子类在不改变算法架构的情况下,重新定义算法中某些步骤。

为了以更简单的术语描述模板方法,考虑这个场景:假设在一个工作流系统中,为了完成任务,有4个任务必须以给定的执行顺序执行。在这4个任务中,不同工作流系统的实现可以根据自身情况自定义任务的执行内容。

模板方法可以应用在上述场景中:将工作流系统的4个核心任务封装到抽象类当中,如果任务可以被自定义,则将可自定义的任务推迟到子类中实现。

阅读全文

一个Java 8中简单Lambda表达式程序

原文链接 作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com)

我尝试过把Lambda表达式融入到我的代码中,下面的代码例子是此次尝试的结果。对于那些完全不知道Lambda表达式的Java程序员,我强烈建议在继续阅读之前,浏览一下这篇文章

Ok,现在你已经熟悉Lambda表达式了(在阅读过推荐的Lambda入门文章之后),那我们现在开始学习一个我认为很好的Lambda表达式的例子。

考虑一下这种场景:某些操作在执行之前需要做预处理,执行之后需要做后期处理。待执行的操作会随着行为的不同而变化。预处理会提取出这个操作所需的必要参数,后期处理做一些清理的工作。

我们来看看如何利用接口与接口的匿名实现类模拟这个场景。

阅读全文

Predicate和Consumer接口– Java 8中java.util.function包下的接口

原文链接 作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com)

早先我写了一篇《函数式接口》,探讨了部分Java 8中函数式接口的用法。我也提及了Predicate接口属于java.util.function包,在这篇文章中,我将展示如何应用Predicate接口和Consumer接口。

阅读全文

Function接口 – Java8中java.util.function包下的函数式接口

作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com)

早先我写了一篇《函数式接口》,探讨了Java8中函数式接口的用法。如果你正在浏览Java8的API,你会发现java.util.function中 Function, Supplier, Consumer, Predicate和其他函数式接口广泛用在支持lambda表达式的API中。这些接口有一个抽象方法,会被lambda表达式的定义所覆盖。在这篇文章中,我会简单描述Function接口,该接口目前已发布在java.util.function中。

阅读全文

Java FP: Java中函数式编程的谓词函数(Predicates)第二部分

作者:  Cyrille Martraire  译者: 李璟(jlee381344197@gmail.com)

在上一篇文章中我们介绍了谓词函数。通过一个简单的只带一个返回值是true或者false的函数的接口,把函数式编程语言的优势带入到了类似Java的面向对象编程语言中。这一小节,我们将会介绍一些高级特性,方便你高效利用谓词函数。

阅读全文

Java FP: Java中函数式编程的谓词函数(Predicates)第一部分

原文链接 作者:  Cyrille Martraire  译者: 李璟(jlee381344197@gmail.com)

你一直在听说函数式编程将称霸整个编程届,而自己仍然沉浸在普通的Java里?请不要担心,因为你已经在日常Java代码中加入了函数式编程的特性。此外,函数式编程很有趣,能够帮你节省多行代码并且降低错误率。

阅读全文

Java FP: 伪造闭包工厂,创建域对象

原文链接 作者:  Mark Needham   译者: 李璟(jlee381344197@gmail.com)

最近我们想构建一个需要使用外部依赖进行计算的域对象,同时我们希望在测试的时候能够忽略这些依赖。

阅读全文

Java FP: Java中函数式编程的Map和Fold(Reduce)

原文链接 作者:  Cyrille Martraire  译者: 李璟(jlee381344197@gmail.com)

在函数式编程中,Map和Fold是两个非常有用的操作,它们存在于每一个函数式编程语言中。既然Map和Fold操作如此强大和重要,但是Java语言缺乏Map和Fold机制,那么该如何解释我们使用Java完成日常编码工作呢?实际上你已经在Java中利用手动编写循环的方式实现了Map和Fold操作(译者注:许多动态语言如python都提供了内置的实现)。

免责声明:本篇文章仅仅只是一篇入门简介,并非函数式编程的参考。函数式编程爱好者可能会不赞同本文观点。

阅读全文

Java IO: 其他字符流(下)

作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

本小节会简要概括Java IO中的PushbackReader,LineNumberReader,StreamTokenizer,PrintWriter,StringReader,StringWriter。

阅读全文

Java IO: 其他字节流(上)

作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

本小节会简要概括Java IO中的PushbackInputStream,SequenceInputStream和PrintStream。其中,最常用的是PrintStream,System.out和System.err都是PrintStream类型的变量,请查看Java IO: System.in, System.out, System.err浏览更多关于System.out和System.err的信息。

阅读全文

函数式编程 Functional Programming

原文链接

在Java程序员的世界里,第一要素是“类”,而在函数式编程里,第一要素则是“函数”。完全不同的编程理念,确实很难让函数式编程出现在Java工程师日常工作的代码中。

阅读全文

Java IO: 字符流的Piped和CharArray

作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader、PipedWriter、CharArrayReader、CharArrayWriter。

阅读全文

return top