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

我定义了2个方法:

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

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

用于将用户数组或者组织数组转为json字符串。
我在声明及使用的时候应该是明确知道我想要用哪个,并且希望程序也能自动判断并调用。
但是实际上,eclipse编译的时候会报错说方法重复了,因为它认为这两个方法的参数都是List,而不会去计较List里面的参数类型是什么。
那么问题来了,我该怎么写才能达到类型重载的效果?
有尝试用泛型,但是以前没在数组中用过,试了几次都是报错,不知道该怎么写了。
另外也不要跟我说什么方法名称改成不一样之类的傻话,那个我也知道的。既然遇到了,我就想试试能否用重载的思想来解决这个问题。

阅读 9.6k
6 个回答
public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<Integer>();
        list1.add(1);
        list1.add(2);
        list1.add(3);
        getJsonArray(list1);
        
        List<String> list2 = new ArrayList<String>();
        list2.add("a");
        list2.add("b");
        list2.add("c");
        getJsonArray(list2);
    }

    private static <T> String getJsonArray(List<T> list) {
        if(list != null && !list.isEmpty()) {
            System.out.println(list.get(0).getClass());
        }
        return "";
    }

这样?

你说的情况就不能运用重载,只能写在一个方法里面。
我写个伪代码提供个思路,你看合不合适

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 "";
                    
            }
    }

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

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

return "";

}

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

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

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

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

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

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

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

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

这样的调用就可以了啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题