У меня есть следующий класс, который, как вы увидите, имеет довольно избыточный метод formatNameAndAddress:
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("");
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("
");
}
public void formatName (PrintWriter out)
{
out.println ( "
");
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("
");
}
}
Я хотел бы переписать класс для использования универсального метода, такого как:
// Print out the name and address.
private void genericFormatNameAndAddress(Object out)
{
out.println("");
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("
");
}
Но я не могу сделать это в точности так, потому что Object не имеет методов print () и println (). Если я приведу вывод к JspWriter или PrintWriter, я буду иногда приводить его неправильно.
Я представляю, что мне нужно как-то передать тип объекта как переменную, а затем использовать переменную для определения способа приведения. Это возможно? Если так, то как? Если нет, то что было бы хорошим решением?