在方法参数中使用带有自定义对象的泛型
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
,让 ItemA
和 ItemB
实现并将您的地图定义为 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
}
我有 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
,让 ItemA
和 ItemB
实现并将您的地图定义为 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
}