gpt4 book ai didi

java - 来自不同类的同名调用方法

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:06 28 4
gpt4 key购买 nike

我有一些类具有相同名称的方法。例如

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;
}
}

然后我需要一个像这样工作的方法:

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();
}

所以这些方法在不同类型的对象上做同样的事情。

有没有办法用一种方法做到这一点?

请注意,我无法对 People 类或 Company 类进行任何更改。

最佳答案

如果这些类没有实现公共(public)接口(interface)或扩展公共(public)基类——即除了名称和签名之外,两组方法之间没有任何关系——那么实现这一点的唯一方法是通过反射。

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;
}

但是,不推荐这样做。您将失去这些方法实际存在的所有编译时保证。没有什么可以阻止某人传递 Integer 或 String 或任何其他没有这些 getter 的类型。

最好的办法是更改现有类型,但如果不能,那就不能。

如果您确实决定更改现有类型,那么请帮自己一个忙,更改属性的名称。因为 nmBn 到底是什么?哦,当然,每个公司都有一个 NumPy 。我真傻。

关于java - 来自不同类的同名调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55357839/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com