Llamando al método del mismo nombre de la clase diferente

Md Shougat Hossain.:

Tengo algunas clases tienen esos métodos con el mismo nombre. Por ejemplo

public class People {
    private Long id;
    private String nm;
    private String nmBn;
    .............
    public Long getId() {
        return id;
    }

    public String getNm() {
        return nm;
    }

    public String getNmBn() {
        return nmBn;
    }
}

public class Company {
    private Long id;
    private String nm;
    private String nmBn;
    .............
    public Long getId() {
        return id;
    }

    public String getNm() {
        return nm;
    }

    public String getNmBn() {
        return nmBn;
    }
}

Entonces necesito un método que funciona como:

public String getPeopleString(People people) {
    if (people == null) {
        return "";
    }
    return people.getNmBn() + "|" + people.getNm() + "#" + people.getId();
}

public String getCompanyString(Company company) {
    if (company == null) {
        return "";
    }
    return company.getNmBn() + "|" + company.getNm() + "#" + company.getId();
}

Por lo que los métodos hacen lo mismo pero en diferente tipo de objeto.

¿Hay alguna manera de hacer esto con un único método?

Tenga en cuenta que no puedo hacer ningún cambio en la Peopleclase o en Companyclase.

Miguel :

Si las clases no implementan una interfaz común o extender una clase base común - es decir, no existe una relación entre los dos conjuntos de métodos que no sean los nombres y firmas - entonces la única manera de lograr esto es a través de la reflexión.

String getString(Object companyOrPeople) throws InvocationTargetException, IllegalAccessException
{
    if (companyOrPeople == null) {
        return "";
    }
    final Method getNmBn = companyOrPeople.getClass().getDeclaredMethod("getNmBn");
    final String nmBm = getNmBn.invoke(companyOrPeople).toString();
    // same with the other two methods
    return nmBm + "|" + nm + "#" + id;
}

Esto no es recomendable, sin embargo. Se pierde todas las garantías de tiempo de compilación que realmente existen estos métodos. No hay nada que impida a alguien que pasa un entero o una cadena o cualquier otro tipo que no tiene los captadores.

Lo mejor que puede hacer es cambiar los tipos existentes, pero si no, no puedo, ¿puedes.

Si decide cambiar los tipos existentes entonces, mientras estás en ello, hágase un favor y cambiar el nombre de los atributos. Porque lo que el infierno es un nmBn? Oh, por supuesto, cada empresa tiene una numbun. Que tonto de mi parte.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=186378&siteId=1
Recomendado
Clasificación