我有两个集合,它们具有几乎相似的属性:
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>
。