tengo la clase siguiente, que como verán tiene más bien un método en lugar formatNameAndAddress redundante:En Java, ¿puedo consolidar dos funciones similares donde usa JspWriter y el otro 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>");
}
}
me gustaría volver a escribir la clase que se utiliza como un método genérico:
// 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>");
}
Pero no puedo hacer esto exactamente así porque Object no tiene los métodos print() e println(). Si lanzo el resultado a JspWriter o PrintWriter, a veces lo lanzaré de la manera incorrecta.
Imagino que lo que tengo que hacer es de alguna forma pasar el tipo de objeto como una variable y luego usar la variable para determinar cómo lanzarlo. es posible? ¿Si es así, cómo? Si no, ¿cuál sería una buena solución?
Eso funciona, ¡salud! –
Sabiendo que podía convertir JspWriter a PrintWriter, traté de llevar mi revisión un poco más lejos (incorporando también la sabiduría de Steve) ... Sin embargo, ahora tengo un nuevo problema sobre el que pregunto en http: // stackoverflow.com/questions/3850079/shouldnt-a-method-que-recibe-java-lang-object-as-input-also-receive-javax-ser –
@Brian, no, no se pudo convertir, 'JspWriter' no es una subclase de 'PrintWriter'. –