0

代码:

public static void main(String[] args) {
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the BookName:");
        String bookName = br.readLine();
        System.out.println("Book Id is: " +bookInfo(bookName).getBookAvail().get(0).getBookID().toString());
        System.out.println("Book Name is: " +bookInfo(bookName).getBookAvail().get(0).getBookName().toString());
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
     try {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the StudentID:");
        String studentID = br.readLine();
        System.out.println("Student Information is: " +studentInfo(studentID));
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}

private static ArrayOfBookAvail bookInfo(java.lang.String bookName) {
    org.tempuri.BookService service = new org.tempuri.BookService();
    org.tempuri.IBookService port = service.getBasicHttpBindingIBookService();
    return port.bookInfo(bookName);
}

private static ArrayOfStudInfo studentInfo(java.lang.String studentID) {
    org.tempuri.BookService service = new org.tempuri.BookService();
    org.tempuri.IBookService port = service.getBasicHttpBindingIBookService();
    return port.studentInfo(studentID);
}

}

我得到的输出是:

Enter the BookName:
Core Servlets and JavaServer Pages, Volume 2:Advanced Technologies
Book Id is: javax.xml.bind.JAXBElement@196da649
Enter the StudentID:
    13MCAL058
Student Information is: org.datacontract.schemas._2004._07.lms.ArrayOfStudInfo@2b08bc5a

请帮助获得正确的输出。先感谢您。

4

1 回答 1

0
Book Id is: javax.xml.bind.JAXBElement@196da649

看起来像bookInfo(bookName).getBookAvail().get(0).getBookID()返回一个JAXBElement. 您可以只调用getValue()而不是toString(), 来获取值。当你调用 时toString(),如果类没有toString()被继承的覆盖Object.class,那么Object#toString()将被调用,这是对象的内存位置。

bookInfo(bookName).getBookAvail().get(0).getBookID().getValue();

假设该值只是一个基元或字符串,那么输出应该没问题。


Student Information is: 
             org.datacontract.schemas._2004._07.lms.ArrayOfStudInfo@2b08bc5a

我不知道是什么ArrayOfStudInfo课。但这似乎是同一个问题,在哪里Object#toString()被调用来获取字符串表示。在不了解ArrayOfStudInfo该类的更多信息的情况下,假设它是您的类,您可以toString()在该类中覆盖,以显示您想要的字符串表示形式。例如

class ArrayOfStudInfo {
    StudentInfo[] studentInfoArray;

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        for (StudentInfo info : studentInfoArray) {
            builder.append(info.getFirstName())
                   .append(" ")
                   .append(info.getLastName())
                   .append("\n");
        }
        return builder.toString();
    }
}

现在我不知道这门课是由什么组成的,我只是在抛出一个想法。如果你不能改变类,那么你总是可以通过从返回的对象中提取值来创建一个字符串。


这样做的要点是,当您尝试将非原始对象放入 print 语句时,它需要具有 String 表示形式,由toString()方法表示。

于 2014-10-11T16:18:14.317 回答