本文主要是介绍Java基础知识总结(83),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
注解
获取注解中的值
/*** 自定义注解*/ @Target({ElementType.TYPE,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnno { String value() default "admin"; // String value(); // int age(); } //若注解属性没有给定属性值,那么需要在使用时给定属性值 //@MyAnno(value = "test",age = 18) //如果注解中有且只有一个注解,并且属性名称叫做value,使用注解是可以不写属性名称的 @MyAnno("test") public class Test { } /*** 获取注解中的值*/ public class GetAnnoValueDemo {public static void main(String[] args) { Class<Test> clazz = Test.class;MyAnno myAnno = clazz.getDeclaredAnnotation(MyAnno.class);System.out.println(myAnno.value()); } }
Lambda
Lambda表达式构成
-
形参列表:Java编译器可以自动推断参数类型,因此可以省略参数的数据类型,其次,如果参数列表只有1个参数时,小括号可以省略
-
箭头函数:->必须有横线和大于号组成
-
代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号。
示例:
@FunctionalInterface public interface MyConsumer { void test();private void test2(){ }static void test3(){ }static void test4(){}default void test5(){System.out.println(50);} } public class MyConsumerTest {public void consumer(MyConsumer consumer){consumer.test();System.out.println("执行MyConsumerTest中的consumer方法");} } /*** Lambda表达式练习*/ public class LambdaDemo {public static void main(String[] args) {//创建不可变集合List<String> list = List.of("张麻子","师爷","黄老爷");list.forEach((t)-> System.out.println(t));MyConsumerTest myConsumerTest = new MyConsumerTest();myConsumerTest.consumer(()->{System.out.println("执行Lambda表达式");});MyConsumer myConsumer = ()->{System.out.println("执行Lambda表达式");};myConsumer.test(); // MyConsumer myConsumer = new MyConsumer() { // @Override // public void test() { // test5(); // } // };myConsumer.test5();} }
注意事项:
-
Lambda 表达式的目标类型必须是明确的函数式接口。
-
Lambda 表达式只能为函数式接口创建对象。Lambda 表达式只能实现一个方法,因此它只能为 只有一个抽象方法的接口(函数式接口)创建对象。
函数式接口
所谓函数式接口,就是接口中有且只能有一个抽象方法。用@FunctionalInterface注解标注,接口可以包含多个默认方法、类方法,私有方法。
这篇关于Java基础知识总结(83)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!