import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 水果名称注解
*/
@Target(FIELD)
@Retention(RUNTIME)
@Documented
@interface FruitName {
String value() default "";
}
/**
* 水果颜色注解
*/
@Target(FIELD)
@Retention(RUNTIME)
@Documented
@interface FruitColor {
/**
* 颜色枚举
*/
public enum Color{ BLUE,RED,GREEN};
/**
* 颜色属性
*/
Color fruitColor() default Color.GREEN;
}
/**
* 水果供应者注解
*/
@Target(FIELD)
@Retention(RUNTIME)
@Documented
@interface FruitProvider {
/**
* 供应商编号
*/
public int id() default -1;
/**
* 供应商名称
*/
public String name() default "";
/**
* 供应商地址
*/
public String address() default "";
}
/**
* 注解处理器
*/
class FruitInfoUtil {
public static Apple getFruitInfo(Class<?> clazz) {
String strFruitName = " 水果名称:";
String strFruitColor = " 水果颜色:";
String strFruitProvicer = "供应商信息:";
Field[] fields = clazz.getDeclaredFields();
Apple a=null;
if(clazz.getName().equals("Apple")){
a=new Apple();
for (Field field : fields) {
if (field.isAnnotationPresent(FruitName.class)) {
FruitName fruitName = (FruitName) field.getAnnotation(FruitName.class);
strFruitName = strFruitName + fruitName.value();
System.out.println(strFruitName);
a.setAppleName(fruitName.value());
} else if (field.isAnnotationPresent(FruitColor.class)) {
FruitColor fruitColor = (FruitColor) field.getAnnotation(FruitColor.class);
strFruitColor = strFruitColor + fruitColor.fruitColor().toString();
System.out.println(strFruitColor);
a.setAppleColor(fruitColor.fruitColor().toString());
} else if (field.isAnnotationPresent(FruitProvider.class)) {
FruitProvider fruitProvider = (FruitProvider) field.getAnnotation(FruitProvider.class);
strFruitProvicer = " 供应商编号:" + fruitProvider.id() + " 供应商名称:" + fruitProvider.name() + " 供应商地址:" + fruitProvider.address();
System.out.println(strFruitProvicer);
a.setAppleProvider(strFruitProvicer);
}
}
}
return a;
}
}
/**
* 注解使用
*/
class Apple {
@FruitName("Apple")
private String appleName;
@FruitColor(fruitColor= FruitColor.Color.RED)
private String appleColor;
@FruitProvider(id=1,name="陕西红富士集团",address="陕西省西安市延安路89号红富士大厦")
private String appleProvider;
public void setAppleColor(String appleColor) {
this.appleColor = appleColor;
}
public String getAppleColor() {
return appleColor;
}
public void setAppleName(String appleName) {
this.appleName = appleName;
}
public String getAppleName() {
return appleName;
}
public void setAppleProvider(String appleProvider) {
this.appleProvider = appleProvider;
}
public String getAppleProvider() {
return appleProvider;
}
public void displayName(){
System.out.println("水果的名字是:苹果");
}
@Override
public String toString() {
return "Apple{" +
"appleName='" + appleName + '\'' +
", appleColor='" + appleColor + '\'' +
", appleProvider='" + appleProvider + '\'' +
'}';
}
}
public class AnnotationTest {
public static void main(String[] args) {
System.out.println(FruitInfoUtil.getFruitInfo(Apple.class));
}
}
java-注解
最新推荐文章于 2023-12-20 17:03:16 发布
本文介绍了一个使用Java注解的示例,展示了如何定义自定义注解,并通过反射获取注解信息,应用于水果类的属性中,包括水果名称、颜色及供应商信息。
8819

被折叠的 条评论
为什么被折叠?



