为了账号安全,请及时绑定邮箱和手机立即绑定

java方法重载参数中的list类型

java方法重载参数中的list类型

宝慕林4294392 2019-03-01 10:32:22
我定义了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 "";
                    
            }
    }
查看完整回答
反对 回复 2019-03-01
?
绝地无双

TA贡献1946条经验 获得超4个赞

类型擦除。也就是在编译后,List<Organization>和List<User>都会被List<Object>。所以泛型不能作为方法重载的区分标识。

查看完整回答
反对 回复 2019-03-01
?
慕的地10843

TA贡献1785条经验 获得超8个赞

你这个不符合重载的条件,泛型不是很好能解决这个问题么?
public static String getJsonArray(List<T> list) {

return "";

}

查看完整回答
反对 回复 2019-03-01
?
慕后森

TA贡献1802条经验 获得超5个赞

这种我觉得你应该自定义类类型来弄然后直接就是

public static String getJsonArray(Organization list) {
    return "";
}

public static String getJsonArray(User list) {
    return "";
}

然后具体的原本类你最好提供一个getData()的接口返回一个List类型的数据

查看完整回答
反对 回复 2019-03-01
?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

我觉得最简单的就是用泛型来做啊,虽然有类型擦除,但是你完全可以把方法的参数就用List<T>这个类型,

<T> String getJsonArray(List<T> list) {方法体}

这样调用的时候直接用类似

List<XXXX> list = new ...();  
getJsonArray(list);

这样的调用就可以了啊

查看完整回答
反对 回复 2019-03-01
  • 5 回答
  • 0 关注
  • 1292 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号