🍳反射注解小案例
案例:主要是对反射和注解进行练习
- 水果店进水果, 水果清单案例,通过自定义的注解给苹果,香蕉标记默认进货数量值,再通过反射获取注解的value值,将值赋值给水果的进货数量。
自定义一个注解mylist
@Target(ElementType.FIELD)//注释字段
@Retention(RetentionPolicy.RUNTIME)//作用于运行时
@interface mylist{
int value() default 10;//默认值10
}
定义一个水果清单类:FruitList
//定义一个水果清单类
class FruitList{
@Override
public String toString() {
return "FruitList{" +
"apple=" + apple +
", banana=" + banana +
", pear=" + pear +
'}';
}
@mylist(20)
Integer apple;//苹果
@mylist
Integer banana;//香蕉
Integer pear;//梨
}
定义处理方法public static FruitList method()
public static FruitList method(FruitList fruitList,Class<FruitList> cls) throws IllegalAccessException {
Field[] fields=cls.getDeclaredFields();
//通过循环获取fruitList集合中所有的属性是否为null
for (Field fi: fields) {
//判断每个字段是否为空
if(fi.get(fruitList)==null){
//判断是否有mylist注解
if(fi.isAnnotationPresent(mylist.class)){
//获取当前字段的注解对象
mylist ml=fi.getAnnotation(mylist.class);
fi.set(fruitList,ml.value());
}
}
}
return fruitList;
}
//========================测试类====================================
public static void main(String[] args) throws IllegalAccessException{
FruitList fl=new FruitList();//创建一个清单对象
fl=method(fl, FruitList.class);//调用方法
System.out.println(fl);
}
结果:
正则的两种使用方式
- String类
- Pattern类
public class Zz01 {
public static void main(String[] args) {
//正则表达式使用一
String str="youjixianxuetang1234youjxingalds";
boolean mat= str.matches("\\d{4}");
System.out.println(mat);
System.out.println(str.replaceFirst("[a-z]", "0"));
System.out.println(str.replaceAll("you", "0"));
System.out.println("------------------------------" );
//正则表达式使用二
Pattern pa=Pattern.compile("(\\w{3})(\\d{3})");
Matcher ma=pa.matcher("youxi123syogjs234ksfsihge45");
System.out.println(ma.find());//true
System.out.println(ma.matches());//false
while(ma.find()){
System.out.println(ma.group()+"-------->"+ma.group(0));
System.out.println(ma.group(1)+"------->"+ma.group(2));
}
}
}
结果:》》