一个函数 形参是List类型 如何实现不同类型如:List和List两种功能

sinat_25671105 2015-04-02 07:43:51
一个函数 形参是List类型 如何实现List<Integer>和List<String>两种功能
static List remDup(List<String> list) 

static List remDup(List<Integer> list) 

两个函数作用是相同的,但是无法通过上述重载。

问题是list迭代时候需要用到不止it.next(),所以需要专门的变量来放置it.next(),可在变量声明时需要声明类型,如果不能重载,就不知道怎么判断it.next()的类型;

初学者……大神勿喷
...全文
605 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_25671105 2015-05-26
  • 打赏
  • 举报
回复
谢谢各位啦!
冥王之锤 2015-04-09
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Main {
	static <T> List<T> remDup(List<T> list) {
		for (T item : list) {
			System.out.println(item);
		}
		return list;
	}

	public static void main(String[] args) {
		List<Integer> listInt = new ArrayList<>(Arrays.asList(1, 6, 3, 89, 5));
		remDup(listInt);
		List<String> listStr = new ArrayList<>(Arrays.asList("one", "two", "four"));
		remDup(listStr);
	}
}
泛型解决。
gotopause 2015-04-09
  • 打赏
  • 举报
回复
上面说的用泛型是对的
王子文龙 2015-04-09
  • 打赏
  • 举报
回复
将参数定义为List<T>, 在方法体内部对类型进行判断,只对Int和String类型进行操作,
kiyoki 2015-04-09
  • 打赏
  • 举报
回复
为什么一定要重载?写成两个方法不就好了
疯狂熊猫人 2015-04-06
  • 打赏
  • 举报
回复
不知道list中的元素是Integer还是String? 对于你说的这种问题,通过 list.get() instanceof Integer就可以判断具体类型了撒,很难吗?
static <E> List<E> remDup(List<E> list) {
		for (E e : list) {
			if (e instanceof Integer) {
				//TODO
			} else if (e instanceof String) {
				//TODO
			}
		}
		return null;
	}
}
邹邹wl 2015-04-06
  • 打赏
  • 举报
回复
泛型
树成 2015-04-06
  • 打赏
  • 举报
回复
试试这种 public LIst remDup(List<? extends Serializable> list) 或者 public <E> List<E> remDup(List<E> list)
raistlic 2015-04-03
  • 打赏
  • 举报
回复
static List remDup(List<String> list) 
返回值是坯型,整个的泛型使用也就没什么意义了 解决方案的话,可以:

static List<String> remDupString(List<String> list) 
static List<Integer> remDupInteger(List<Integer> list) 
如果是所有类型通用的功能,可以

static <E> List<E> remDupString(List<E> list) 
如果是某种类型通用的功能,可以用接口或者通用父类型来限定范围,比如,如果必须是 Comparable 的:

static <E extends Comparable<E>> List<E> remDupString(List<E> list) 
那么方法内用 E 来声明的变量就可以调用 compareTo 方法
飏飏一蝶 2015-04-03
  • 打赏
  • 举报
回复
引用 4 楼 csdn_mrsongyang 的回复:
[quote=引用 1 楼 qq118194716 的回复:] 在jvm看来两个都是 List remDup(List) 存在歧义没法重载 两种方式: 1、使用不同返回值 2、改重载为static List<E> remDup(List<E> list) 另外你的泛型要怎么强制转换为普通List?
实用不同返回值应该不是方法重载吧?[/quote] 仅仅在java泛型中成立~
JPF1024 2015-04-02
  • 打赏
  • 举报
回复
基本已经可以实现你所想的了,但是显得有些笨拙,如果能拆开最好还是拆开,看起来比较清晰。下面代码有部分是用java1.8写的,有注释,instanceof可以自行百度看看.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by puruidong on 2015/4/2.
 */
public class TestDemo {
    public static void main(String[] args) {
        //记住下面这个一定要用Integer,而不能用int,否则下面判断不了!!!
        /*Java 1.8 Version */
        //List<Integer>
        parse(Arrays.asList(new Integer [] {1,2,3,4,5,6,7,8,9,10})).forEach(System.out::println);

        //List<String>
        parse(Arrays.asList(new String [] {"12","2","3"})).forEach(System.out::println);

        /*Java 1.8 Version end. */

        /*----------------------------------------------------*/

        /*Java 1.7 Version   */
        //List<Integer>
        List<?> lists =  parse(Arrays.asList(new Integer [] {1,2,3,4,5,6,7,8,9,10}));

        //List<String>
        //List<?> lists =  parse(Arrays.asList(new String [] {"12","2","3"}));
        for (Object os :lists){
            System.out.println(os);
        }
        /*Java 1.7 Version  end */

    }


    private static List<? extends Object> parse(List<? extends  Object> list){
        if(list.size()==0){
            return null;
        }
        /**/
        List<Object> result = null ;
        //处理String.
        if(list.get(0) instanceof  String){
            //如果是String则增加一个Hello World到末尾.
            result = new ArrayList<>(list);
            result.add("hello world");
        }else if (list.get(0) instanceof  Integer){
            //处理Integer
             result = new ArrayList<>(list);
            result.add(5000000);
            /*
            * 处理更多的思路是:使用下面的循环遍历出里面的值强转为int.即可.
            for (Object os:list){
            int rs = (int)os;//或者使用int rs = Integer.valueOf(os.toString());
            //其他操作,不要在这里将修改后的值赋给list,否则报错.
        }
            */
        }
        return result ;
    }

}
飏飏一蝶 2015-04-02
  • 打赏
  • 举报
回复
在jvm看来两个都是 List remDup(List) 存在歧义没法重载 两种方式: 1、使用不同返回值 2、改重载为static List<E> remDup(List<E> list) 另外你的泛型要怎么强制转换为普通List?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧