luke_yang 2011-08-19 15:12
浏览 254
已采纳

如何根据注解创建新对象

碰到一个任务, 需要根据注解来创建一个新对象,而不能使用new关键字. 在取得注解的内容后,不知道如何根据注解内容来生成一个新的User对象?

[code="java"]package annopractise;

import java.lang.reflect.Field;

public class UserAnnoTest {

@UserAnno(id = 13, name = "sanan")
public User user;

public UserAnnoTest() throws ClassNotFoundException {
    Class<?> cl = UserAnnoTest.class;

    for (Field field : cl.getFields()) {
        UserAnno userAnno = field.getAnnotation(UserAnno.class);
        if (userAnno != null) {
            [color=red]// 此处该如何继续, 这里已经得到注解内容, 但是不知道如何创建User对象[/color]
        }
    }
}

@Override
public String toString() {
    return user.toString();
}

public static void main(String[] args) throws ClassNotFoundException {

    UserAnnoTest annoTest = new UserAnnoTest();
    System.out.println(annoTest);
}

}[/code]

User和UserAnno的代码如下:
[code="java"]package annopractise;

public class User {
int id;
String name;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Override
public String toString() {
    return "id: " + id + "\tname: " + name + "\n";
}

}[/code]

[code="java"]package annopractise;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserAnno {

int id();

String name() default "";

}[/code]

  • 写回答

4条回答 默认 最新

  • DreamZhong 2011-08-19 16:06
    关注

    还可以这样做
    Class userClass = User.class;
    Constructor constructor = userClass.getConstructor();
    user = constructor.newInstance();
    user.setId(id);
    user.setName(name);
    但是记住,如果User中有多个构造方法,一定记得申明一个无参的构造方法,如果一个构造方法都没有的话就不用担心。

    还有获取类属性应该用这个方法 Field[] fields = clazz.getDeclaredFields();

    我使用你提供的getFields方法无任何返回值,具体原因还在查。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝