java - 无法使用 get(index) 显示对象数组

标签 java arrays object

我正在尝试在 ArrayList 中显示不同的对象。在我的项目环境中,一名学生就是一个对象。

我使用 ArrayList 来存储所有不同的学生对象,但在读取 ArrayList 时遇到问题。

 <%
   String student_name = request.getParameter("studentName"); 
  ArrayList<Object[]> studentList = new ArrayList<Object[]>();
  if(student_name != null && student_name.length() > 0) {
  PreparedStatement preparedStatement = con.prepareStatement("Select * from      users where firstname LIKE ? ");
  preparedStatement.setString(1, "%" +student_name+ "%");
  ResultSet resultSet = preparedStatement.executeQuery();

  while (resultSet.next()) {
      String first_name = resultSet.getString("firstname");
      String last_name = resultSet.getString("lastname");
      String email = resultSet.getString("email");

      Object[] student = {first_name,last_name,email};
      studentList.add(student);
      session.setAttribute("studentObject",studentList);


      //System.out.println("First Name: " + first_name + "," + "Last Name: " + last_name);
      System.out.println(studentList.get(0));


  }

当我尝试显示 (studentList.get(0)) 时,我看到的只是“[Ljava.lang.String;@XXXX”

我如何让它根据索引显示不同的学生对象?

最佳答案

首先,在 Java 中定义自己的类 Student 更为惯用。为该类编写一个提取器,定义 toString 方法,这会很棒。

Java 要求您为要打印的任何类型的对象定义 toString 方法。因此,您必须为您的 Student 类定义 toString

但是你正在使用一个数组。 Java 没有为数组定义 toString 方法。所以我建议你做这样的事情。 (我有点着急,所以代码可能包含一些错误:

// At first it could be better to define a structure
// that represents a student
// class must be defined in separate file like Student.java
// Student.java
public class Student {
   // constructor for the Student object
   public Student(final String firstName,
                  final String lastName,
                  final String email) {

       this.firstName = firstName;
       this.lastName  = lastName;
       this.email     = email;
   }

   private String firstName;
   private String lastName;
   private String email;

   @override String toString() {
       return firstName + " " + lastName + " " + email;
   }

   // getters
   public String getFirstName() { return firstName; }
   public String getLastName() { return lastName; }
   public String getEmail() { return email; }

   // setters
   public void setFirstName(final String firstName) {
       this.firstName = firstName;
   }

   public void setLastName(final String lastName) {
       this.lastName = lastName;
   }

   public void setEmail(final String email) {
       this.email = email;
   }
} // end of Student.java file
///////////////////////////////////////////

final ArrayList<Student> studentList = new ArrayList<Student>();

.... // your code

ResultSet resultSet = preparedStatement.executeQuery();

while (resultSet.next()) {
   // creating a new student with new keyword
   final Student currentStudent = new Student(
       resultSet.getString("firstname"),
       resultSet.getString("lastname"),
       resultSet.getString("email")
   )

   // you are adding a student object to the list
   studentList.add(currentStudent);
   session.setAttribute("studentObject",studentList);

   // that should work
   // toString method will be called implicitly
   System.out.println(studentList.get(0));
}

// So you will have a list of students
// that will be accessable in the following manner:

studentList.get(0).getFirstName;
studentList.get(1).setFirstName("New name");

如果您想要不同的行为,您可以直接调用这些字段,或修改 toString 方法的行为

Java 还假设您使用驼峰命名法,您可以在 style guide 中找到.

希望有帮助。

关于java - 无法使用 get(index) 显示对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40592679/

相关文章:

Java 正则表达式 - 尝试使用正则表达式获取 "function"参数数组

Javascript:在二维矩阵(数组)中查找矩形的 Angular 位置

javascript - 如何使用 React 在 typescript 中安全地定义数组数组

javascript - AngularJS 不创建新对象

java - 从不同的 JAVA 类调用方法

java - jzmq 与 jeromq 用于启动和运行 ZeroMQ,jeromq 可以工作,但 jzmq 不行,但为什么呢?

c - char 数组的行为如何?当它被类型转换为指向结构的指针时?

java - 将父类(super class)转换为子类

javascript - 在ajax请求中传递对象

java - 每当我在 Eclipse 中将浏览器设置为 DEFAULT WEB BROWSER(Chrome) 时,它都会显示错误。我该如何纠正它?