Tôi có lớp sau, như bạn sẽ thấy có khá một phương pháp formatNameAndAddress khá dư thừa:Trong Java, tôi có thể hợp nhất hai chức năng tương tự khi sử dụng JspWriter và PrintWriter khác không?
package hu.flux.helper;
import java.io.PrintWriter;
import javax.servlet.jsp.JspWriter;
// A holder for formatting data
public class NameAndAddress
{
public String firstName;
public String middleName;
public String lastName;
public String address1;
public String address2;
public String city;
public String state;
public String zip;
// Print out the name and address.
public void formatNameAndAddress(JspWriter out)
throws java.io.IOException
{
out.println("<PRE>");
out.print(firstName);
// Print the middle name only if it contains data.
if ((middleName != null) && (middleName.length() > 0))
{out.print(" " + middleName);}
out.println(" " + lastName);
out.println(" " + address1);
if ((address2 != null) && (address2.length() > 0))
out.println(" " + address2);
out.println(city + ", " + state + " " + zip);
out.println("</PRE>");
}
public void formatName(PrintWriter out)
{
out.println("<PRE>");
out.print(firstName);
// Print the middle name only if it contains data.
if ((middleName != null) && (middleName.length() > 0))
{out.print(" " + middleName);}
out.println(" " + lastName);
out.println(" " + address1);
if ((address2 != null) && (address2.length() > 0))
out.println(" " + address2);
out.println(city + ", " + state + " " + zip);
out.println("</PRE>");
}
}
Tôi muốn viết lại lớp để sử dụng một phương pháp chung chung như:
// Print out the name and address.
private void genericFormatNameAndAddress(Object out)
{
out.println("<PRE>");
out.print(firstName);
// Print the middle name only if it contains data.
if ((middleName != null) && (middleName.length() > 0))
{out.print(" " + middleName);}
out.println(" " + lastName);
out.println(" " + address1);
if ((address2 != null) && (address2.length() > 0))
out.println(" " + address2);
out.println(city + ", " + state + " " + zip);
out.println("</PRE>");
}
Nhưng, tôi không thể làm điều này chính xác như thế này bởi vì Object không có phương thức print() và println(). Nếu tôi đưa đầu ra vào JspWriter hoặc PrintWriter, đôi khi tôi sẽ truyền nó sai.
Tôi tưởng tượng những gì tôi cần làm là bằng cách nào đó chuyển loại đối tượng dưới dạng biến và sau đó sử dụng biến để xác định cách truyền. Điều này có thể không? Nếu vậy, làm thế nào? Nếu không, đâu là giải pháp tốt?
Hoạt động, chúc mừng! –
Biết rằng tôi có thể truyền JspWriter sang PrintWriter, tôi đã cố gắng sửa đổi thêm một chút (cũng kết hợp với sự khôn ngoan của Steve) ... Tuy nhiên, bây giờ tôi có một vấn đề mới mà tôi hỏi tại http: // stackoverflow.com/questions/3850079/shouldnt-a-method-đó-nhận-java-lang-object-as-input-cũng-nhận-javax-ser –
@Brian, không bạn không thể truyền, 'JspWriter' không một lớp con của 'PrintWriter'. –