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

我定义了2个方法:

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

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

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

宝慕林4294392
浏览 1293回答 5
5回答

30秒到达战场

你说的情况就不能运用重载,只能写在一个方法里面。我写个伪代码提供个思路,你看合不合适 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>。所以泛型不能作为方法重载的区分标识。

慕的地10843

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

慕后森

这种我觉得你应该自定义类类型来弄然后直接就是 public static String getJsonArray(Organization list) { return ""; } public static String getJsonArray(User list) { return ""; } 然后具体的原本类你最好提供一个getData()的接口返回一个List类型的数据

qq_遁去的一_1

我觉得最简单的就是用泛型来做啊,虽然有类型擦除,但是你完全可以把方法的参数就用List<T>这个类型, <T> String getJsonArray(List<T> list) {方法体} 这样调用的时候直接用类似 List<XXXX> list = new ...(); getJsonArray(list); 这样的调用就可以了啊
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java