注解
获取注解中的值
/*** 自定义注解*/
@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 表达式只能实现一个方法,因此它只能为 只有一个抽象方法的接口(函数式接口)创建对象。