メリーランドShougat・ホセイン。:
私はそれらが同じ名前のメソッドを持っているいくつかのクラスを持っています。例えば
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
クラス。
マイケル:
クラスは、共通のインタフェースを実装したり、共通の基底クラスを拡張しない場合 - つまり名前と署名以外の方法の2つのセットの間に関係はありません - そして、これを実現する唯一の方法は、リフレクション経由です。
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;
}
しかし、これは、推奨されません。あなたはこれらのメソッドは、実際に存在することを、すべてのコンパイル時の保証を失います。整数または文字列またはそれらのゲッターを持っていない他のタイプを渡す人を止めるものは何もありません。
行うための最善のことは、既存のタイプを変更することですが、あなたができない場合は、あなたがすることはできません。
あなたは、既存のタイプを変更することを決定したならば、あなたはそれでいる間、自分に好意を行うと、属性の名前を変更します。地獄はnmBn何のでですか?ああ、もちろん、すべての企業はnumbunを持っています。どのように私の愚かな。