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

时间:2016-11-14 15:48:20

标签: 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”

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

5 个答案:

答案 0 :(得分:1)

首先,在Java中定义自己的类Student会更加惯用。写一个提取器到那个类,定义toString方法,它会很棒。

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

但是你正在使用数组。 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还假设您使用了camelCase表示法,您可以在style guide中找到。

希望它有所帮助。

答案 1 :(得分:0)

试试SignalResource课程:

System.out.println(Arrays.toString(studentList.get(0)));

答案 2 :(得分:0)

目前您正在打印出不完全是人类可读的Object []。我建议创建一个名为Student的新类。然后有三个成员变量firstName,lastName和email。还为这个新类创建一个toString()方法。然后你可以有一个学生的ArrayList。这应该简化一切。

答案 3 :(得分:0)

您似乎没有尝试按预期显示String,而是尝试显示array Objects

您可以尝试:System.out.println(studentList.get(0)[0]);

你会有一个想法

答案 4 :(得分:0)

您至少有两个选择:

  1. 实施与Object[]学生相对应的对象:
    在这个类中,您可以覆盖Object的toString(),并将其实现为希望呈现数据。 注意:这与您非常相关,因为在打印studentList.get(0)时,您实际打印调用对象的默认toString(),它返回对象的引用。

    有关默认Object.toString() here

  2. 的详细信息
  3. 最简单的方法是使用Arrays.toString()
    的System.out.println(Arrays.toString(studentList.get(0)));