gpt4 book ai didi

java - Web 应用程序中 getter 的困惑

转载 作者:行者123 更新时间:2023-12-01 09:34:16 24 4
gpt4 key购买 nike

我正在使用 servlet 和 jsp 制作一个非常基本的 Web 应用程序,并且进行了以下设置:

public class DataManager {
//some method implementations omitted since they are not important
public DataManager(){}

public class Author{
public int id;
public String name;
public String born;
public String died;
}

public Author getAuthor(int authorId){}
public ArrayList<Author> getAuthors(){}
}

public class AuthorsServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
ServletContext context = getServletContext();
DataManager dm = (DataManager) context.getAttribute("datamanager");
ArrayList<DataManager.Author> authors = dm.getAuthors();

request.setAttribute("authors", authors);
request.getRequestDispatcher("/authors.jsp").forward(request, response);

}
}

在我的 jsp 文件中:

<c:forEach var="author" items="${authors}">
<tr>
<td>${author.id}</td>
<td><a href="author.jsp">${author.name}</a></td>
<td>${author.born}</td>
<td>${author.died}</td>
</tr>
</c:forEach>

但是我不断收到错误消息 Property 'id' not found on type db.DataManager$Author直到我在内部放入 setter/getter Author我的类(class)DataManager类:

public class Author{
public int id;
public String name;
public String born;
public String died;
public int getId(){ return id; }
public String getName(){ return name;}
public String getBorn(){return born; }
public String getDied(){ return died;}
}

我有两个(基本的)问题:

  1. 为什么我必须添加 getter 来访问公共(public)内部类的变量?

  2. 即使在我放入 setter/getter 之后,我也没有直接调用它们(即 author.id 而不是 author.getId() ),编译器遵循命名约定,所以我必须定义 getFoo获取 foo 的值变量?

最佳答案

运行时环境自动调用author.getId()以评估${author.id}。这就是为什么即使字段是公共(public)的,您也需要显式地定义 getter(因为 Java 不会隐式地定义它们)。

有一个命名约定:如果字段的名称是 fooFieldExample,则 getter 的名称应该是 getFooFieldExample (注意 foo 的大 F)

关于java - Web 应用程序中 getter 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39140312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com