如何设计一个可以处理两种不同对象类型的方法



我有两个集合,它们具有几乎相似的属性:

HashSet<BuyerUser>
HashSet<SellerUser>

我想写一个方法,序列化JSON对象,并将其发送到web API。然而,我的问题是,我无法编写一个足够通用的方法,这样我就不必重复两次代码。

public void addToMetadata (Object users) {
if (users instanceof BuyerUser) {
// Do this
}
if (users instanceof SellerUser) {
// Do that
}
}

我的问题是instanceOf检查不工作的方式我概述了它。我需要输入

if (users instanceof HashSet<BuyerUser>)

但是这给了我一个错误:

llegal generic type for instanceof

可以用任何方法解决吗?

if (users instanceof HashSet<BuyerUser>)

你不能这样做,因为当instanceof调用在运行时被擦除泛型

相反,更好的方法是创建BuyerUser和SellerUser的父类,或者创建一个BuyUser和SellerUser都有的接口,该接口具有类似 的函数
public String toJSON ()

由于参数化类型在运行时丢失,因此不能这样做。您可以为每个HashSet创建一个包装器,并向其添加一个返回类型的方法:

public class MySet<T> extends HashSet<T> {
private Class<T> type;
public MySet(Class<T> c) {
this.type = c;
}
public Class<T> getType() {
return type;
}
}

或者您可以获取集合的第一个元素并检查其类型:

if(set instanceof HashSet && !set.isEmpty() && set.iterator().next() instanceof BuyerUser) {
// BuyerUser set
}

注意set可能包含不同类型的对象,例如如果它被定义为HashSet<Object>

最新更新