如何用同一方法处理POJOFoo与POJOFoo2并创建对应ObservableList
解决同一方法处理不同POJO的方案
嘿,这个问题其实用Java的泛型或者接口约束就能轻松搞定,我给你两种实用方案:
方案一:泛型方法(最灵活的选择)
如果你的两个POJO没有共同的行为,只是需要用同一个方法来处理并生成对应类型的ObservableList,泛型方法是最佳选择。它能让方法自动适配传入的POJO类型:
// 定义泛型方法,<T>表示这是一个类型参数 public <T> void processPOJO(T pojo) { // 这里的ObservableList会自动匹配传入的pojo类型 ObservableList<T> observableDescriptions = FXCollections.observableArrayList(new LinkedList<>()); // 后续可以添加处理逻辑,比如将传入的对象加入列表 observableDescriptions.add(pojo); // 其他操作... }
调用的时候完全不用额外处理,Java会自动推断类型:
processPOJO(new POJOFoo()); // 此时ObservableList的类型是POJOFoo processPOJO(new POJOFoo2()); // 此时ObservableList的类型是POJOFoo2
方案二:通过共同接口约束(适合有共同行为的场景)
如果你的POJOFoo和POJOFoo2后续可能会有共同的方法或属性,推荐让它们实现同一个接口,这样既能统一类型,又能在方法里调用共同行为:
首先定义一个接口(可以是空接口,也可以添加共同方法):
public interface BasePOJO { // 可以在这里定义两个POJO的共同方法,比如: // String getDescription(); }
让你的POJO实现这个接口:
public class POJOFoo implements BasePOJO {} public class POJOFoo2 implements BasePOJO {}
然后修改处理方法:
public void processPOJO(BasePOJO pojo) { ObservableList<BasePOJO> observableDescriptions = FXCollections.observableArrayList(new LinkedList<>()); observableDescriptions.add(pojo); // 如果接口有定义方法,这里可以统一调用,比如: // String desc = pojo.getDescription(); }
这种方案的优势是类型更安全,而且能为后续的扩展留出空间。
内容的提问来源于stack exchange,提问作者Kurt Ruzell
相关产品推荐
相关产品推荐

