Mam następujące klasy, która jak widać ma raczej dość nadmiarową metodę formatNameAndAddress:W języku Java, czy mogę skonsolidować dwie podobne funkcje, w których używa JspWriter i innych PrintWriter?
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>");
}
}
Chciałbym przepisać klasę użyć metody rodzajowe jak:
// 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>");
}
Ale nie mogę tego zrobić dokładnie tak, ponieważ Object nie ma metod print() i println(). Jeśli wyrzucę dane wyjściowe do JspWriter lub PrintWriter, czasami będę je rzucał w niewłaściwy sposób.
Wyobrażam sobie, co muszę zrobić, to przekazać typ obiektu jako zmienną, a następnie użyć zmiennej do określenia sposobu rzutowania. czy to możliwe? Jeśli tak to jak? Jeśli nie, jakie byłoby dobre rozwiązanie?
To działa, okrzyki! –
Wiedząc, że mogę rzucić JspWriter do PrintWriter, próbowałem nieco zmienić moją wersję (włączając w to mądrość Steve'a) ... Jednak teraz mam nowy problem, o który pytam na http: // stackoverflow.com/questions/3850079/shouldnt-a-method-that-receives-java-lang-object-as-input-also-receive-javax-ser –
@Brian, nie, którego nie można obsłużyć, 'JspWriter' nie jest podklasa 'PrintWriter'. –