我有两个类,它们都包含 ObservableList 但填充了不同的对象。在其他逻辑类中,我有返回列表中适当对象的函数:
public CarTableView findCarTableView( Button button) {
for(CarTableView carnet : carTableViewModel.getObservableList()) {
if(carnet.getActionButton().equals(button)) {
return carnet;
}
}
return null;
}
第一类:
public class CustomerTableView extends Customer{
private ObservableList<CustomerTableView> list = FXCollections.observableArrayList(); //HERE
private Button actionButton;
public CustomerTableView(String name, String surname, String city,
String postCode, String street,
String localNumber, Button actionButton) {
super(name, surname, city, postCode, street, localNumber);
this.actionButton=actionButton;
}
}
第二类:
public class CarTableView extends Car{
private ObservableList<CarTableView> list = FXCollections.observableArrayList(); //HERE
private Button actionButton;
public CarTableView(String brand, String engine, String yearOfProduction,
boolean navi, boolean available, int power,
Button actionButton) {
super(brand, engine, yearOfProduction, navi, available, power);
this.actionButton=actionButton;
}
}
但此功能仅适用于特定类的一个对象。我发现了泛型功能,但遇到了一个问题。在这个函数中,我必须使用特定的方法,这两个类都有 (getActionButton()
,getObservableList()
)
我遇到过这样的代码,但是编译器告诉我缺少这些功能,我怎样才能做得更好?
public <T> T findCarTableView(T t, Button button) {
for(T carnet : t.getObservableList()) {
if(carnet.getActionButton().equals(button)) {
return carnet;
}
}
return null;
}
最佳答案
您的问题是编译器不知道 T
的任何边界,因此必须假设 Object
。因此 t.getObservableList()
无法工作,因为该方法不存在于 Object
中。
为了使这项工作提供一个公共(public)接口(interface)或父类(super class),并将其用作 T
的边界:
interface CommonInterface<T extends CommonInterface<T>> {
Collection<T> getObservableList();
}
public <T extends CommonInterface<T>> T findCarTableView(T t, Button button) {
for(T carnet : t.getObservableList()) {
...
}
}
请注意,这假设类型为 T
的对象包含其他相同类型的可观察对象。如果不是这种情况,请将您的界面和方法更改为如下所示:
interface CommonInterface<T> {
Collection<T> getObservableList();
}
public <T> T findCarTableView(CommonInterface<T> t, Button button) {
for(T carnet : t.getObservableList()) {
...
}
}
关于java - Java 中的泛型,通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45440300/