Effective Java~44. 坚持使用标准的函数接口

在 java.util.Function 中有 43 个接口。不能指望全部记住它们,但是如果记住了六个基本接口,就可以在需要它们时派生出其余的接口。基本接口操作于对象引用类型。

Operator 接口表示方法的结果和参数类型相同。

Predicate 接口表示其方法接受一个参数并返回一个布尔值。

Function 接口表示方法其参数和返回类型不同。

Supplier 接口表示一个不接受参数和返回值 (或“供应”) 的方法。

Consumer 表示该方法接受一个参数而不返回任何东西,本质上就是使用它的参数。

六种基本函数式接口概述如下:

接口方法示例
UnaryOperator<T>T apply(T t)String::toLowerCase
BinaryOperator<T>T apply(T t1, T t2)BigInteger::add
Predicate<T>boolean test(T t)Collection::isEmpty
Function<T,R>R apply(T t)Arrays::asList
Supplier<T>T get()Instant::now
Consumer<T>void accept(T t)System.out::println


        在处理基本类型 int,long 和 double 的操作上,六个基本接口中还有三个变体。 它们的名字是通过在基本接口前加一个基本类型而得到的。 因此,例如,一个接受 int 的 Predicate 是一个 IntPredicate ,而一个接受两个long 值并返回一个 long 的二元运算符是一个 LongBinaryOperator 。 除 Function 接口变体通过返回类型进行了参数化,其他变体类型都没有参数化。 例如, LongFunction<int[]> 使用 long 类型作为参数并返回了 int [] 类型。

        Function 接口还有九个额外的变体,当结果类型为基本类型时使用。 源和结果类型总是不同,因为从类型到它自身的函数是 UnaryOperator 。 如果源类型和结果类型都是基本类型,则使用带有 SrcToResult 的前缀Function ,例如 LongToIntFunction (六个变体)。如果源是一个基本类型,返回结果是一个对象引用,那么带有 ToObj 的前缀 Function ,例如 DoubleToObjFunction (三种变体)。

        有三个包含两个参数版本的基本功能接口,使它们有意义: BiPredicate <T,U> , BiFunction <T,U,R> 和 BiConsumer <T,U> 。 也有返回三种相关基本类型的 BiFunction 变体: ToIntBiFunction <T,U> , ToLongBiFunction<T,U> 和 ToDoubleBiFunction <T,U> 。Consumer 有两个变量,它们带有一个对象引用和一个基本类型: ObjDoubleConsumer <T> , ObjIntConsumer <T> 和 ObjLongConsumer <T> 。 总共有九个两个参数版本的基本接口。

        最后,还有一个 BooleanSupplier 接口,它是 Supplier 的一个变体,它返回布尔值。 这是任何标准函数式接口名称中唯一明确提及的布尔类型,但布尔返回值通过 Predicate 及其四种变体形式支持。 前面段落中介绍的 BooleanSupplier 接口和 42 个接口占所有四十三个标准功能接口。 无可否认,这是非常难以接受的,并且不是非常正交的。 另一方面,你所需要的大部分功能接口都是为你写的,而且它们的名字是经常性的,所以在你需要的时候不应该有太多的麻烦。

        大多数标准函数式接口仅用于提供对基本类型的支持。 不要试图使用基本的函数式接口来装箱基本类型的包装类而不是基本类型的函数式接口。 虽然它起作用,但它违反了第 61 条中的建议:“优先使用基本类型而不是基本类型的包装类”。使用装箱基本类型的包装类进行批量操作的性能后果可能是致命的。

<think>嗯,用户想了解Java入门,应该从哪里开始呢?首先,可能需要介绍Java的基本概念,比如它的特点、应用场景。然后,可能需要讲解开发环境的搭建,比如安装JDK,配置环境变量,安装IDE,比如Eclipse或者IntelliJ IDEA。接下来,可能需要一个简单的Hello World示例,让用户能够运行第一个程序。然后,可能需要讲解基础语法,比如变量、数据类型、运算符、控制结构、方法和类。之后,可以提到面向对象编程的概念,封装、继承、多态。还要强调练习的重要性,比如推荐一些练习平台或者项目。可能还需要提到学习资源,比如官方文档、书籍或者在线课程。用户可能是编程新手,所以需要语言简洁,避免使用太多专业术语,或者至少解释清楚。同时要注意结构清晰,分步骤讲解,让用户容易跟随。可能还需要提醒一些常见的问题,比如环境变量配置出错,或者语法错误,以及如何调试。另外,Java版本的选择,比如目前主流的Java 8或者更高版本,是否需要关注新特性。还有开发工具的选择,比如IDE的优势和基本使用方法。是否需要涉及构建工具,比如Maven或者Gradle,可能在入门阶段暂时不需要,但可以提一下后续学习的方向。总之,要覆盖Java的基础知识,环境搭建,简单示例,核心概念,学习资源和练习建议,帮助用户系统地入门Java。</think>### Java入门指南:从零开始学习Java --- #### 一、Java简介 **Java** 是一种面向对象、跨平台的高级编程语言,由Sun Microsystems于1995年发布,核心特性包括: 1. **跨平台性**(“一次编写,到处运行”):通过JVM(Java虚拟机)实现。 2. **面向对象**:支持封装、继承、多态等特性。 3. **丰富的类库**:提供标准API,简化开发复杂度。 **应用场景**:Android开发、Web后端(Spring框架)、大数据(Hadoop)、企业级应用等。 --- #### 二、开发环境搭建 1. **安装JDK(Java Development Kit)** - 下载地址:[Oracle JDK](https://www.oracle.com/java/) 或 [OpenJDK](https://adoptium.net/) - 推荐版本:JDK 11或17(长期支持版本)。 2. **配置环境变量** - 设置 `JAVA_HOME` 指向JDK安装路径。 - 将 `%JAVA_HOME%\bin` 添加到系统 `PATH` 中。 3. **安装IDE(集成开发环境)** - **IntelliJ IDEA**(社区版免费):适合初学者。 - **Eclipse**:开源免费,轻量级。 --- #### 三、第一个Java程序:Hello World 1. 创建文件 `HelloWorld.java` ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` 2. 编译与运行: ```bash javac HelloWorld.java # 编译生成字节码文件 HelloWorld.class java HelloWorld # 通过JVM执行程序 ``` --- #### 四、基础语法核心 1. **变量与数据类型** - 基本类型:`int`, `double`, `char`, `boolean` 等。 - 引用类型:类、数组、接口。 ```java int age = 25; String name = "Alice"; ``` 2. **控制结构** - 条件语句:`if-else`, `switch` - 循环语句:`for`, `while`, `do-while` ```java if (score >= 60) { System.out.println("及格"); } else { System.out.println("不及格"); } ``` 3. **方法(函数)** ```java public static int add(int a, int b) { return a + b; } ``` 4. **类与对象** ```java public class Dog { String breed; void bark() { System.out.println("汪汪!"); } } // 使用类 Dog myDog = new Dog(); myDog.bark(); ``` --- #### 五、面向对象编程(OOP) 1. **封装**:通过访问修饰符(`private`, `public`)隐藏内部细节。 2. **继承**:子类继承父类属性和方法。 ```java class Animal {} class Cat extends Animal {} ``` 3. **多态**:同一方法在不同对象中有不同实现。 --- #### 六、学习建议与资源 1. **练习平台**: - [LeetCode](https://leetcode.com/)(算法) - [Codecademy](https://www.codecademy.com/)(互动学习) 2. **书籍推荐**: - 《Java核心技术 卷I》(Cay S. Horstmann) - 《Effective Java》(Joshua Bloch) 3. **实战项目**: - 简单计算器 - 学生管理系统 - 基于控制台的图书管理系统 --- #### 七、常见问题 1. **环境配置失败**:检查 `JAVA_HOME` 和 `PATH` 是否正确。 2. **语法错误**:注意分号 `;` 和花括号 `{}` 的匹配。 3. **空指针异常**:对象未初始化时调用方法。 --- 通过以上步骤,你可以逐步掌握Java基础,后续可深入学习集合框架、多线程、网络编程等高级主题。坚持编码实践是关键!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值