我正在尝试在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”
如何根据索引显示不同的学生对象?
答案 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)
您至少有两个选择:
实施与Object[]
学生相对应的对象:
在这个类中,您可以覆盖Object的toString()
,并将其实现为希望呈现数据。
注意:这与您非常相关,因为在打印studentList.get(0)
时,您实际打印调用对象的默认toString()
,它返回对象的引用。
有关默认Object.toString()
here。
最简单的方法是使用Arrays.toString()
:
的System.out.println(Arrays.toString(studentList.get(0)));