java 泛型小结

本文深入探讨了Java中的泛型技术,包括泛型类、泛型方法、类型变量限制、泛型通配符以及泛型的擦除等关键概念,并通过实例展示了如何在实际开发中灵活运用泛型增强程序的灵活性。

java中的泛型技术,使得对象类型不在是固定的,而是可以作为参数来指定,比较常用的代码如下

List<Integer> ls=new ArrayList<Integer>()
没有泛型时List默认装载的是Object类对象,所以在取出元素的时候需要强制类型转换成为元素本身的类型。

使用泛型技术,事先指定了这个List装载的对象类型就是Integer,所以在取出元素时不需要再进行类型转换。

泛型类:

在声明一个类的时候,添加类型变量作为它的参数,就构成了一个泛型类。一个简单的例子如下。

package array;


class MyValue{
	private T value1;
	private Integer value2;
	MyValue(T t1,Integer t2){
		this.value1=t1;
		this.value2=t2;
	}
	public T getValue1(){
		return value1;
	}
	public Integer getValue2(){
		return value2;
	}
}
public class genericity {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyValue mv4=new MyValue(5,"5");
		MyValue mv1=new MyValue("god",5);
		MyValue mv2=new MyValue(5,"good");
		System.out.println("mv1 value2="+mv1.getValue2());
		System.out.println("mv2 value2="+mv2.getValue2());
		mv1.getValue2();
		mv2.getValue2();
	}

}
在创建类对象时,才指定类中两个参数的类型,通过使用泛型类可以使程序有更大的灵活性,成员变量与方法的类型可以在实际调用时再确定,而不必像原来在开发时就确定。

泛型方法:
在方法中也可以带有一个或者多个类型参数,泛型方法可以在普通类和泛型类中定义,一般以静态方法居多。
public static <T>T getLast(T[] a){
		return a[a.length-1];
	}
这个方法用于返回T类型数组的最后一个元素,而T类型可以在运行的时候再指定。

类型变量的限制:
使用 类型变量 extends  限定类型序列如:
T extends Number&Comparable&Serializable
则类型变量T的类型只能是Number的子类并且要实现Comparable和Serializable接口。这里Integer类型是符合的String类型不符合,所以不能把T指定为String类型。

泛型通配符:
在使用泛型时,如果 A是B的子类,但是G<A>并不能看做G<B>使用,这和继承不同,如果要让一种泛型匹配其他的泛型,可以使用?符号,ArrayList<?>表示可以接受ArrayList<任意具体类型>
ArrayList<String> as=new ArrayList<String>();
ArrayList<?> ao=new ArrayList<Object>();
ao=as; //若使用ArrayList<Object> ao=new ArrayList<Object>();则会报错。
使用泛型通配符需要注意,泛型通配符只能用于引用声明中,不可以使用采用了泛型通配符的
也可以对泛型通配符进行限制 ?  extends 类名或者接口名

泛型的擦除:
如果在调用一个声明了泛型参数的类时不给出泛型参数的类型,系统会自动按照一定的规则来设置泛型参数的类型,这就是泛型的擦除。
使用泛型时要注意一些限制这些限制大部分是由自动擦除引起的。
限制有:
类型参数可以指定的类型中不包括基本类型,如 MyValue<int>非法,MyValue<Integer>可以。
不能在静态成员中使用类型变量。
public class Myclass<T>
{
    public static T getValue();
}
类型变量实际代表的类型要在类创建的时候才会给出,而静态方法只要类加载就可以调用,所以这一段代码不能通过编译。
数组,不能再数组声明中使用泛型,如下代码不能通过编译:
MyValue <String>[] mv=new MyValue<String>[10];
泛型的 instanceof检查,
mylist instanceof ArrayList<Integer>
mylist instanceof ArrayList<String>
以上两段代码检查结果是一样的,它只对不包括泛型的部分(ArrayList)进行检查。

下面一段是对HashMap按key排序的代码。
Set<String> keySet = map.keySet();
<span style="white-space:pre">	</span>List<String> keylist=new ArrayList<String>();
<span style="white-space:pre">	</span>for(String k:keySet){
<span style="white-space:pre">		</span>keylist.add(k);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>Collections.sort(keylist);
<span style="white-space:pre">	</span>for(Iterator<String> ite = keylist.iterator(); ite.hasNext();) {
<span style="white-space:pre">	</span>    String temp = ite.next();
<span style="white-space:pre">	</span>    System.out.println("key-value: "+temp+","+map.get(temp));
<span style="white-space:pre">	</span>}
如果想要按字典的降序排列,则需改写sort方法里面的比较器Comparator:
Collections.sort(keySet, new Comparator() {
    public int compare(Object o1, Object o2) {
       if(Integer.parseInt(o1.toString())>Integer.parseInt(o2.toString())
            return 1;
       if(Integer.parseInt(o1.toString())==Integer.parseInt(o2.toString())
           return 0;
        else
            return -1;
    }
});





当前,全球经济格局深刻调整,数字化浪潮席卷各行各业,智能物流作为现代物流发展的必然趋势和关键支撑,正迎来前所未有的发展机遇。以人工智能、物联网、大数据、云计算、区块链等前沿信息技术的快速迭代与深度融合为驱动,智能物流不再是传统物流的简单技术叠加,而是正在经历一场从自动化向智能化、从被动响应向主动预测、从信息孤岛向全面互联的深刻变革。展望2025年,智能物流系统将不再局限于提升效率、降低成本的基本目标,而是要构建一个感知更全面、决策更精准、执行更高效、协同更顺畅的智慧运行体系。这要求我们必须超越传统思维定式,以系统化、前瞻性的视角,全面规划和实施智能物流系统的建设。本实施方案正是基于对行业发展趋势的深刻洞察和对未来需求的精准把握而制定。我们的核心目标在于:通过构建一个集成了先进感知技术、大数据分析引擎、智能决策算法和高效协同平台的综合智能物流系统,实现物流全链路的可视化、透明化和智能化管理。这不仅是技术层面的革新,更是管理模式和服务能力的全面提升。本方案旨在明确系统建设的战略方向、关键任务、技术路径和实施步骤,确保通过系统化部署,有效应对日益复杂的供应链环境,提升整体物流韧性,优化资源配置效率,降低运营成本,并最终为客户创造更卓越的价值体验。我们致力于通过本方案的实施,引领智能物流迈向更高水平,为构建现代化经济体系、推动高质量发展提供强有力的物流保障。
电源题电赛单相并网离网软件硬件锁相环单极性双极性调制等代码及仿真环路计算资料+原理图PCB内容概要:本文档是一份关于电力电子与能源系统仿真研究的技术资料集合,涵盖单相并网/离网系统、软件与硬件锁相环设计、单极性与双极性调制技术、虚拟同步机控制建模、P2G-CCS耦合系统、微电网优化调度、光伏风电联合运行、储能配置及需求响应等多个电力系统核心主题。文档提供了大量基于Matlab/Simulink的代码实现与仿真模,包括LLC谐振变换器小信号分析、永磁同步电机控制、DC-AC变换器设计、光伏阵列故障仿真、直流微电网建模等,并附有原理图与PCB设计资源。同时整合了智能优化算法(如遗传算法、粒子群、灰狼优化器)、机器学习模(如LSTM、CNN-GRU-Attention)在负荷预测、故障诊断、路径规划等领域的应用案例,形成一个跨学科的科研资源包。; 适合人群:电气工程、自动化、能源系统及相关专业的研究生、科研人员以及从事电力电子、微电网、新能源控制方向的工程师;具备Matlab/Simulink编程基础和一定电力系统理论知识者更佳。; 使用场景及目标:① 支持电赛或科研项目中对并网逆变器、锁相环、调制策略的设计与验证;② 用于复现高水平论文(如EI/SCI)中的优化调度、控制算法与仿真模;③ 辅助开展微电网能量管理、储能配置、需求响应策略等课题的研究与代码开发;④ 提供可直接调用的算法模板与仿真平台,提升科研效率。; 阅读建议:建议按照文档结构逐步浏览,优先下载并整理网盘中的完整资源包,结合具体研究方向选取对应代码与模进行调试与二次开发;对于复杂算法(如NSGA-II、ADMM、MPC),应配合文献理解其数学原理后再实施仿真;关注其中“论文复现”类内容以提升学术研究规范性与技术深度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值