在方法中返回另一个 class 的方法。导致 java.lang.NullPointerException
Returning a method of another class within a method. Causing java.lang.NullPointerException
我是 java 的新手,我正在创建通用社交媒体网站。我的用户 class 可以创建 "Post" class。尝试查看这些 post 时,我收到上述错误。我想在 class 中创建一个方法,以便用户 class 并查看它是与其关联的字符串 post class.
import java.util.Scanner;
public class User {
private String password, address;
private Post myPost;
private int age;
public String userName;
public User (String u, String p, String l, int a) {
userName = u;
password = p;
address = l;
age = a;
}
public String viewLoginName ( ) {
return userName;
}
public String viewPassword ( ) {
return password;
}
public String viewAddress ( ) {
return address;
}
public int viewAge ( ) {
return age;
}
public Post createPost ( ) {
Scanner reader = new Scanner ( System.in );
String message;
System.out.println("What would you like to share? ");
message = reader.next ( );
myPost = new Post(userName + ": " + message);
return myPost;
}
public String viewMyPost()
{
return myPost.viewPost();
}
//the new method meant to allow users to view other users post
public String viewUserPost(String user)
{
return user.viewMyPost();
}
}
//Post Class
import java.util.Scanner;
public class Post {
private String message, acknowledged = "";
//Scanner reader = new Scanner ( System.in );
//message = reader.nextString ( );
public Post(String m) {
message = m;
}
public String viewPost() {
return message;
}
public String acknowledge() {
System.out.println("What is your username?");
Scanner reader = new Scanner(System. in );
String acknowledger;
acknowledger = reader.next();
acknowledged = acknowledged + acknowledger + ',';
return acknowledged;
}
}
您通过在方法中重新声明来隐藏 myPost 变量。这会使 class 字段为空。不要重新申报。
public String createPost() {
Scanner reader = new Scanner(System. in );
String message;
System.out.println("What would you like to share? ");
message = reader.next();
// Post myPost = new Post(userName + ": " + message);
myPost = new Post(userName + ": " + message); // note the difference?
return "";
}
作为附带建议,我会从您的用户 class 中获取所有用户界面代码,因为它不属于那里,并且您冒着 运行 通过创建 Scanner 对象而陷入资源问题的风险一遍又一遍。相反,UI 代码属于它自己的其他地方 class,您应该考虑为 createPost 方法提供一个名为 message 的字符串参数。
此外,我还会考虑摆脱 Post 变量本身及其 getter 方法,而只使用 createPost(String message) 方法 return调用时的 Post 对象。现在它 return 是一个无用的空字符串,对您或您的用户没有帮助。
public Post createPost(String message) {
return new Post(userName + ": " + message);
}
我是 java 的新手,我正在创建通用社交媒体网站。我的用户 class 可以创建 "Post" class。尝试查看这些 post 时,我收到上述错误。我想在 class 中创建一个方法,以便用户 class 并查看它是与其关联的字符串 post class.
import java.util.Scanner;
public class User {
private String password, address;
private Post myPost;
private int age;
public String userName;
public User (String u, String p, String l, int a) {
userName = u;
password = p;
address = l;
age = a;
}
public String viewLoginName ( ) {
return userName;
}
public String viewPassword ( ) {
return password;
}
public String viewAddress ( ) {
return address;
}
public int viewAge ( ) {
return age;
}
public Post createPost ( ) {
Scanner reader = new Scanner ( System.in );
String message;
System.out.println("What would you like to share? ");
message = reader.next ( );
myPost = new Post(userName + ": " + message);
return myPost;
}
public String viewMyPost()
{
return myPost.viewPost();
}
//the new method meant to allow users to view other users post
public String viewUserPost(String user)
{
return user.viewMyPost();
}
}
//Post Class
import java.util.Scanner;
public class Post {
private String message, acknowledged = "";
//Scanner reader = new Scanner ( System.in );
//message = reader.nextString ( );
public Post(String m) {
message = m;
}
public String viewPost() {
return message;
}
public String acknowledge() {
System.out.println("What is your username?");
Scanner reader = new Scanner(System. in );
String acknowledger;
acknowledger = reader.next();
acknowledged = acknowledged + acknowledger + ',';
return acknowledged;
}
}
您通过在方法中重新声明来隐藏 myPost 变量。这会使 class 字段为空。不要重新申报。
public String createPost() {
Scanner reader = new Scanner(System. in );
String message;
System.out.println("What would you like to share? ");
message = reader.next();
// Post myPost = new Post(userName + ": " + message);
myPost = new Post(userName + ": " + message); // note the difference?
return "";
}
作为附带建议,我会从您的用户 class 中获取所有用户界面代码,因为它不属于那里,并且您冒着 运行 通过创建 Scanner 对象而陷入资源问题的风险一遍又一遍。相反,UI 代码属于它自己的其他地方 class,您应该考虑为 createPost 方法提供一个名为 message 的字符串参数。
此外,我还会考虑摆脱 Post 变量本身及其 getter 方法,而只使用 createPost(String message) 方法 return调用时的 Post 对象。现在它 return 是一个无用的空字符串,对您或您的用户没有帮助。
public Post createPost(String message) {
return new Post(userName + ": " + message);
}