以下是我要做的事情:
我有这段代码:
Object selectedCreditId = null;
int i = 0;
String selectedCreditName = leasing.getCredit().getDisplayName();
Collection<DCredRating> selectCreditIds = creditData.getItemIds();
for (DCredRating id: selectCreditIds) {
String creditItem = id.getDisplayName();
if (selectedCreditName.equals(creditItem)) {
selectedCreditId = creditData.getIdByIndex(i);
}
i++;
}
我想使用此代码创建函数。
该函数将leasing
类和creditData
BeanItemContainer作为参数并返回selectedCreditId
对象。
换句话说就是这样:
private Object getSelectedCreditId(LeasingResP param, BeanItemContainer<...> param2) {
Object selectedCreditId = null;
int i = 0;
LeasingResP leasing = param;
BeanItemContainer<...> creditData = param2;
String selectedCreditName = leasing.getCredit().getDisplayName();
Collection<...> selectCreditIds = creditData.getItemIds();
for (... id: selectCreditIds) {
String creditItem = id.getDisplayName();
if (selectedCreditName.equals(creditItem)) {
selectedCreditId = creditData.getIdByIndex(i);
}
i++;
}
}
这里的问题是creditData
容器可以是不同的类。
有没有&#34;漂亮&#34;这样做的方式,或者我必须为不同的类写一个if块?
答案 0 :(得分:1)
如果您对容器中收集的bean类型不感兴趣,可以将方法声明如下:
private Object getSelectedCreditId(LeasingResP param, BeanItemContainer<?> param2) {
...
}
“?”表示未知类型的容器,因此您只知道它们的类型为Object
的bean。
您还可以使方法通用,以便返回正确的类型:
private <T extends DCredRating> T getSelectedCreditId(LeasingResP param, BeanItemContainer<? extends T> param2) {
...
}
第二个变体的用法是(例子):
LeasingResP param = ...
BeanItemContainer<DCredRating> container = ...
DCredRating dcr = getSelectedCreditId(param, container);
答案 1 :(得分:0)
如果您不想使用if语句。您可以尝试此操作,创建Interface
:
import java.util.Collection;
public interface CreditDataInterface {
public Collection<Long> getItemIds();
public String getDisplayName();
public Object getIdByIndex(int i);
}
在DCredRating
类和其他想要传递给getSelectedCreditId
方法的类中实现此接口。
之后,您可以安全地将BeanItemContainer<CreditDataInterface>
对象传递给getSelectedCreditId
方法。
答案 2 :(得分:0)
“要限制creditData
容器的类类型,请使用通用接口(仅包含类签名)将其用作对象类型:
public interface CreditData {
//...
}
每种creditData
类都必须实现这个新界面。
现在将界面用作父类型:
private Object getSelectedCreditId(LeasingResP param, BeanItemContainer<? extends CreditData> param2) {
//...
BeanItemContainer<? extends CreditData> creditData = param2;
//...
Collection<CreditData> selectCreditIds = creditData.getItemIds();
}
==&GT; “? extends CreditData
”表示扩展/键入的所有对象 CreditData