一个函数 形参是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()的类型;

初学者……大神勿喷
...全文
666 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泛型中成立~
student-ai 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?
内容概要:本文围绕“阶梯碳下考虑P2G-CCS与供需灵活响应的IES优化调度”展开,基于Matlab平台构建综合能源系统(IES)在阶梯式碳交易机制下的优化调度模型。研究深度融合电制气(P2G)与碳捕集、利用与封存(CCS)技术,结合需求侧灵活响应机制,旨在提升系统的低碳运行能力与经济性。通过建立多能流耦合的优化模型,协调电力、天然气、热力等多种能源形式的协同调度,有效降低系统碳排放强度,并借助YALIMIP工具包调用求解器进行高效求解。文档提供了完整的代码实现、模型构建流程与结果分析方法,涵盖从问题建模到仿真实现的全过程,具备较强的可复现性与科研参考价值。; 适合人群:具备电力系统、能源系统或优化建模相关背景的研究生、高校教师及工程技术人员,尤其适合从事综合能源系统、碳减排策略、P2G与CCS技术集成研究的专业人员,需熟练掌握Matlab编程与基本的数学规划知识。; 使用场景及目标:①用于研究阶梯式碳交易政策下综合能源系统的低碳经济调度策略;②支撑P2G-CCS技术与需求响应机制在IES中的仿真集成与性能评估;③作为撰写高水平学术论文(如EI/SCI收录)的技术基础与复现资源,推动碳中和背景下能源系统优化方向的创新研究。; 阅读建议:建议结合百度网盘提供的完整代码与资料包,按照模块逐步调试程序,重点理解目标函数的设计逻辑、碳交易成本的建模方式、约束条件的数学表达及求解器的配置方法,同时关注多能耦合设备的建模细节,配合公众号“荔枝科研社”获取持续的技术支持与案例拓展。
内容概要:本文系统研究了基于卷积神经网络(CNN)与支持向量机(SVM)融合的CNN-SVM混合模型在数据分类预测中的应用,尤其聚焦于工业故障识别领域。通过Matlab平台实现,该方法首先利用CNN强大的多层次特征提取能力对原始输入数据进行深度特征学习,自动捕获关键局部模式与空间结构信息,随后将提取的高层特征作为输入传递至SVM分类器,借助SVM在高维空间中小样本条件下卓越的分类性能与泛化能力完成最终判别任务。文中详尽阐述了模型的整体架构设计、网络参数配置、训练优化流程及特征迁移机制,充分结合了深度学习在特征表达上的优势与传统机器学习在分类决策上的稳健性。实验部分通过实际故障数据集验证了该混合模型相较于单一CNN或SVM模型在分类准确率、鲁棒性和抗过拟合能力方面的显著提升,证明了其在复杂故障诊断任务中的有效性与先进性; 适合人群:具备一定机器学习与深度学习理论基础,熟悉Matlab编程环境,从事故障诊断、模式识别、智能制造、电力系统监控或工业数据分析等相关领域的研究生、科研人员及工程技术开发者; 使用场景及目标:① 应用于旋转机械、电力设备、航空航天等领域的多类别故障识别与状态监测;② 掌握深度特征提取与传统分类器融合的技术路径,提升小样本、高噪声环境下数据分类的精度与可靠性;③ 为撰写高水平学术论文、开展科研项目或工程实践提供可复现的算法框架与完整代码支持; 阅读建议:读者应深入理解CNN与SVM的协同工作机制,重点分析特征提取层与分类层之间的接口设计,建议动手运行并调试所提供的Matlab代码,尝试在不同数据集上进行迁移实验与参数调优,以全面掌握该混合模型的应用技巧与优化策略。

62,622

社区成员

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

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