在方法参数中使用带有自定义对象的泛型

Using generics with custom object in method parameters

我有 2 个 class 如下 ::

ItemA {
    // varibales and methods.
}

ItemB{
    // varibales and methods.
}

我在服务中有一个方法 class :

public Map<String, ItemDetails> getItemDetails(Map<String, ItemA> itemMap, String itemType){

    // do something

}

现在我需要根据调用方的某些条件传递 ItemA 或 ItemB。 return 类型在任何一种情况下都不会改变。我如何使用泛型或通配符来做到这一点。

这就是我想要实现的目标:

public Map<String, ItemDetails> getItemDetails(Map<String, ?> itemMap, String itemType){

    // do something

}

以上是处理这种情况的好方法还是请提出更好的方法。我是仿制药的新手,所以需要您的帮助。

您可以创建一个接口 Item,让 ItemAItemB 实现并将您的地图定义为 Map<String, Item>,如果这适合您的用例。

我认为结合使用多态性和泛型可能是可行的方法。

考虑使用接口 Item 并相应地更改您的 classes

interface Item {
    // TODO: declare methods common for all items
}


class ItemA implements Item {
    // TODO: implement the interface
}

class ItemB implements Item {
    // TODO: implement the interface
}

那么你的方法就会变成

public Map<String, ItemDetails> getItemDetails(Map<String, Item> items) {
   // TODO: implement the method body
}

但要注意基于 class 类型的写入条件,as it's a common anti pattern

即最好避免这样的代码

// anti pattern, should be avoided
if (item instanceof ItemA) {
    // do one thing
} else if (item instanceof ItemB) {
    // do another thing
}