我定义了2个方法:
public static String getJsonArray(List<Organization> list) {
return "";
}
public static String getJsonArray(List<User> list) {
return "";
}
用于将用户数组或者组织数组转为json字符串。我在声明及使用的时候应该是明确知道我想要用哪个,并且希望程序也能自动判断并调用。但是实际上,eclipse编译的时候会报错说方法重复了,因为它认为这两个方法的参数都是List,而不会去计较List里面的参数类型是什么。那么问题来了,我该怎么写才能达到类型重载的效果?有尝试用泛型,但是以前没在数组中用过,试了几次都是报错,不知道该怎么写了。另外也不要跟我说什么方法名称改成不一样之类的傻话,那个我也知道的。既然遇到了,我就想试试能否用重载的思想来解决这个问题。
5 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
你说的情况就不能运用重载,只能写在一个方法里面。
我写个伪代码提供个思路,你看合不合适
public static String getJsonArray(List<Object> list) {
if(list.size()==0)
return "";
else
for (Object object : list) {
if(object instanceof User)
.......
return "";
else if(object instanceof Organization)
.......
return "";
}
}
绝地无双
TA贡献1946条经验 获得超4个赞
类型擦除。也就是在编译后,List<Organization>和List<User>都会被List<Object>。所以泛型不能作为方法重载的区分标识。
慕的地10843
TA贡献1785条经验 获得超8个赞
你这个不符合重载的条件,泛型不是很好能解决这个问题么?
public static String getJsonArray(List<T> list) {
return "";
}
慕后森
TA贡献1802条经验 获得超5个赞
这种我觉得你应该自定义类类型来弄然后直接就是
public static String getJsonArray(Organization list) {
return "";
}
public static String getJsonArray(User list) {
return "";
}
然后具体的原本类你最好提供一个getData()的接口返回一个List类型的数据
qq_遁去的一_1
TA贡献1725条经验 获得超8个赞
我觉得最简单的就是用泛型来做啊,虽然有类型擦除,但是你完全可以把方法的参数就用List<T>这个类型,
<T> String getJsonArray(List<T> list) {方法体}
这样调用的时候直接用类似
List<XXXX> list = new ...();
getJsonArray(list);
这样的调用就可以了啊
添加回答
举报
0/150
提交
取消
