Java注解与Lambda表达式详解

需积分: 1 0 下载量 101 浏览量 更新于2024-08-03 收藏 6KB MD 举报
"Java基础学习笔记,涵盖注解和Lambda表达式的使用。" 在这篇笔记中,主要讨论了Java语言中的两个重要特性:注解(Annotation)和Lambda表达式。 首先,我们来看注解。注解在Java中是一种元数据,它提供了将信息附加到代码(如类、方法等)的方式,这些信息可以在编译时或运行时被编译器或JVM使用。在示例中,创建了一个名为`MyAnno`的自定义注解,它有两个可选的属性:`value`和`age`。`@Target`指定注解可以应用于类型(ElementType.TYPE)和方法(ElementType.METHOD),而`@Retention`指定了注解的保留策略为运行时(RetentionPolicy.RUNTIME),这意味着在运行时可以通过反射获取这些注解信息。 获取注解值的方法是通过`getDeclaredAnnotation`,这可以从类或方法上获取声明的注解。在示例的`GetAnnoValueDemo`类中,通过`Class`对象的`getDeclaredAnnotation`方法获取到了`Test`类上的`MyAnno`注解,并打印出其`value`属性的值。 接下来,我们讨论Lambda表达式,这是Java 8引入的一个重要特性,用于简化函数式编程。Lambda表达式由三部分组成: 1. 形参列表:可以省略参数类型,如果参数只有一个,甚至可以省略小括号。在示例中,`MyConsumer`接口定义了一个无返回值的方法`test`,表示一个消费型函数。 2. 箭头符号:`->`,标志着参数列表结束,后面跟着函数体。 3. 代码块:可以是一条或多条语句,如果只有一条语句,可以省略花括号。在`MyConsumerTest`类中,`consumer`方法接受一个`MyConsumer`类型的参数,然后调用其`test`方法。 `@FunctionalInterface`注解用于标记一个接口为函数式接口,这意味着它只能有一个非默认(非静态)方法。在`MyConsumer`接口中,尽管定义了多个方法,但只有`test`是非抽象的,所以它满足函数式接口的要求。 Lambda表达式的使用大大简化了代码,使得处理集合或其他需要回调函数的场景更加简洁。例如,你可以用Lambda来实现`Consumer`接口,从而在遍历集合时进行某种操作,而无需定义单独的匿名内部类。 总结起来,这篇笔记涵盖了Java中注解的创建与使用,以及Lambda表达式的构成和应用,这些都是现代Java开发中不可或缺的知识点。理解并熟练运用这些特性,能提高代码的可读性和可维护性,同时利用Lambda可以更好地实现函数式编程风格。