>我有这个POJO类:
@Component
public class ClassOne{
public int id;
public String fname;
public String lname;
public String code;
super constructor
fields constructor
getters & setters
}
我有这个服务类:
@Service
public class ClassOneServiceImpl implements ClassOneService{
public ClassOneServiceImpl{}
@override
public boolean addUser(String fname,String lname,String code){
Class<?> theClass =
Class.forName("com.somepackage.ClassOne");
Constructor<?> theClassConstructor =
theClass.getConstructor(String.class, String.class,String.class);
ClassOne theClassObj = (ClassOne)
theClassConstructor.newInstance("fname","lname","code");
Field fnameField = theClass.getDeclaredField("fname");
Field lnameField = theClass.getDeclaredField("lname");
Field codeField = theClass.getDeclaredField("code");
System.out.println("Field name is " +
fnameField.getName()); //I get the Field's name
String fnameStr =(String)
fnameField.get(theClassObj); //the NPE caused here
String lnameStr =(String)
lnameField.get(theClassObj);
System.out.println(fnameStr); //here getting null
...here is the code to persist the form's field data .
}
}
显然,"theClassObj"没有被实例化,因为服务类没有main方法......我的错误是什么以及如何在这种情况下获取实例?
我尝试从服务类构造函数中放置实例。没用。
java.lang.NullPointerException: null
根据评论行,您说" fnameField
"为空。
这是不可能的。因为"fnameField
"不能为空。以下语句将为您提供Field
对象或NoSuchFieldException
。
Field fnameField = theClass.getDeclaredField("fname");
好吧,我得到的NPE是因为我以似乎错误的方式将Field对象包装到字符串中:String fnameStr =(String( fnameField.get(theClassObj(; NPE在这里引起
要正确包装:String fnameStr =String.valueOf(fnameField.get(theClassObj((;
NPE现在消失了.谢谢。
编辑:我替换了答案,因为你似乎已经想通了一些东西,所以我仍然不确定这真的是问题所在。
根据您的答案,您的真正问题可能是您允许用户ID,电子邮件和/或密码的值为"null"。在这种情况下,您的代码需要的只是一些非空检查。
您的答案指向一个方向,即现在只需测试字符串"null"
,而不是要测试的 null 值。
useridString =(String) useridField.get(signupClassObj);
System.out.println(useridString);
emailString = (String)emailField.get(signupClassObj);
passwordString = (String)passwordField.get(signupClassObj);
... check if values are not null ...
if (!useridString.isEmpty() && !emailString.isEmpty() && !passwordString.isEmpty()) {