泛型的学习

韩顺平Java学习 泛型 自己照着视频写的笔记 阅读详情

最近在看android框架源码中,看到很多使用了

<具体类名称>或者
<T>
<E>
<符号>
...
这些格式的代码

凡是代码使用了

<xxx>

这个格式,那么别多想了,一定是使用了泛型。。。

看了一篇不错的文章:
http://www.cnblogs.com/lwbqqyumidi/p/3837629.html
学习总结:

1、
使用其实只要2中
T 某个具体泛型 类
? 所有泛型 类

使用格式主要:
new 类名<xxx>

class 类<xxx>

interface 名称<xxx>

参数   T t;

方法  public T  getName(){  
...
return T;
} 

在创建类的时候指定了泛型,和创建的类没有半毛钱关系,

public class Studnet<T>{
...
}

上面代码,T和Student没有直接关系。
在student类中,
可能有方法返回类型是 T,
参数类型是 T,
也可能根本没有使用T。
如果出现T,那么所有的T都是一样的,同一个类型!!!

public class Student<T> {
    T id;//
    int age;

    public Student(T id, int age) {//T
        super();
        this.id = id;
        this.age = age;
    }

    public Student(T id) {
        // TODO Auto-generated constructor stub
        this.id = id;
    }


    public T getId() {
        return id;
    }

    public void setId(T id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

测试:

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

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student s;
        Student<Integer> student = new Student();
        //指定了T是Integer
        student.setId("1");
        /*出错,
        The method setId(Integer) in the type Student<Integer> is not applicable for the arguments (String)
        */
    }
}

正确写法:

       Student<Integer> student = new Student();
        student.setId(100);

要是我同时指定id 是 int 或者double、float ,更牛逼的是id可以是任何类型,怎么办啊????

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

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student<String> student0 = new Student();
                student0.setId("123");
        Student<Integer> student1 = new Student();
                student1.setId(123);
        Student<Double> student2 = new Student();
                student2.setId(123d);
        Student<Float> student3 = new Student();
                student3.setId(123f);
        student0.getId(); 
        student1.getId();
        student2.getId();
        student3.getId();
    }
}

比如,4种类型,那我就要写4个getId( );
这也太麻烦了吧。。。
答案就是泛型通配符!!!
简化:

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student<String> student0 = new Student();
        student0.setId("123");
        getStuId(student0);
        //
        Student<Integer> student1 = new Student();
        student1.setId(123);
        getStuId(student1);
        //
        Student<Double> student2 = new Student();
        student2.setId(123d);
        getStuId(student2);
        //
        Student<Float> student3 = new Student();
        student3.setId(123f);
        getStuId(student3);

    }

    private static void getStuId(Student<?> student) {
        System.out.println(student.getId().getClass());
    }
}


打印:
class java.lang.String
class java.lang.Integer
class java.lang.Double
class java.lang.Float

Student<?> student 这个对象可以理解成是
所有具体泛型对象的 父类!!!!!!!!!!!!!!!!!
貌似只能在方法参数中使用????????????
类型通配符一般是使用 ? 代替具体的类型实参。注意了,此处是类型实参,而不是类型形参!

如果你想过滤一下通配符代表的类
使用

<? extends xxxx类> 

 private static void getStuId(Student<? extends Number> student) {。。。}

这个时候
    Student<String> student0 = new Student();
        student0.setId("123");
        getStuId(student0);
        报错
        The method getStuId(Student<? extends Number>) in the type Test is not applicable for the arguments (Student<String>)

扩展
泛型不支持数组

//Cannot create a generic array of Student<String>
        Student<String>[] stuArray=new Student<String>[100];

修改:
        Student<Integer>[] stuArray=new Student[100];
        stuArray[0].setId(123);//必须是Integer

这里你可能会想,那我在创建类的时候直接用调配符不就好了,支持各种类型自动转化 啊,我试过了不行!!!

//Syntax error on token "?", invalid TypeParameter
public class Student<?> {
...
}

报错啦,只能给具体的类或者T、E、a,b,c,e,d 等字母!!!!
就是不能使用通配符,通配符在
传入方法参数中使用!!!
在方法返回值类型中也不支持通配符!!!

 public ? getId() {
        return id;
    }

Multiple markers at this line
- Syntax error on token “?”, delete this
token

好了,就这些,你看List、各种框架源码中涉及的也就这些吧。。。
拜拜

2017/6/23
一个类创建的时候包含泛型,我们再new 类的时候可以不带泛型,
当调用类中方法设计到泛型,会自动识别转换。
上面的student例子:

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
Student is a raw type. References to generic type Student<T> should be parameterized
*/
        Student student = new Student();
        student.setId(123d);
        getStuId(student);
        。。。
}
打印
class java.lang.Double
手把手教你用AD9834 DDS模块DIY一个可调信号源(附AD原理图/PCB/程序) 本文详细介绍了如何使用AD9834 DDS模块DIY一个高精度可调信号源,涵盖硬件搭建、原理图解读、PCB优化和程序烧录等关键步骤。通过STM32控制实现0-10MHz频率范围输出,特别适合电子设计与射频实验,提供完整的AD原理图、PCB设计和程序代码参考。 阅读详情

相关推荐

POST 接口,将参数拼接到 URL 上,而不是将其作为表单数据发送

POST 接口,将参数拼接到 URL 上,而不是将其作为表单数据发送

pig_ning的博客 3146

Java泛型遇到多态与Java泛型边界

说明: 今天,继续学姐java编程思想-泛型这一章的时候,对于通配符的理解不够明白,于是又网上查了些资料,发现一篇写的很好的文章,在此记录学习一下

yx19861211的博客 1812

RTKLIB模糊度固定实战:三种模式对比与部分模糊度固定代码解析

本文深入解析RTKLIB中模糊度固定的三种核心模式(continuous、instantaneous、fix and hold),对比其性能与适用场景,并详细拆解了部分模糊度固定技术的源码实现。通过实战案例与代码级解析,为GNSS高精度定位开发者提供了在不同数据特性下提升固定成功率的优化思路与配置建议。

efc1234567的博客 473

java泛型总结学习

代码中经常有用到泛型,但是从来没有系统的总结一下它的用法,今天有时间就做一个总结。 (一)概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。 (二)为什么使用泛型 在以往的J2ES中,没有泛型的情况下,通常是通过

答案是肯定的 1076

有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(中)

有限时间滑模控制(FTSMC)和固定时间滑模控制(FixTSMC)是两种重要的控制策略,旨在实现系统状态的快速收敛。FTSMC通过设计滑模面和控制律,确保系统状态在有限时间内收敛到原点,但其收敛时间与初始状态相关。FixTSMC则进一步优化,使收敛时间与初始状态无关,适用于高动态环境,具有更强的鲁棒性和更平滑的控制信号。两种方法均通过李雅普诺夫函数证明其稳定性,并通过仿真验证其有效性。FixTSMC在工程应用中更为可靠,尤其适合安全关键系统。

Lyajpunov的博客 3224

【Rcode】生存分析: KM & COX回归& 随机森林& nomogram

本文使用了R——survival包下的lung数据进行方法测试: 1)KM 2) Cox回归:多因素 3)随机森林因子(根据cox回归结果) 4)nomogram ( 根据cox回归结果,建立了中位生存时间,1年5年生存率的概率计算) -------------------????????‍♀️本文只有干货,非常干!????----------------------------- 一、数据加载 #生存分析 library("survival") library("survminer") data("

weixin_43172152的博客 9273

java泛型学习

设计目的 当我们将一个对象放入集合中,集合不会记住此对象的类型, 当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型 取出集合元素时需要人为的强制类型转化到具体的目标类型,强转的时候容易报错"java.lang.ClassCastException" 引出泛型 使集合能够记住集合内元素各类型,且能够达到只要编译时不出现问题,运行时就不会出现“java...

一夜听风雨2019的博客 407

晶体管的 栅极gate 材料选用 多晶硅polysilicon,并采用 自对准工艺 self-aligned IC后端版图 【VLSI】

本文为了解决为什么要使用多晶硅作栅极触点的问题,先介绍了MOS管的工作原理是通过栅极上所加的电压控制漏极与源极之间电流,然后解释了栅极的材料为什么选用多晶硅,然后介绍了晶体管里栅极的自对准工艺(Self-Aligned Gate )。

Jie_MSD的博客 1万+

java中泛型学习总结

为什么需要使用泛型:1):存储任意类型的数据在集合中 ,但是取出来都是Object类型的,此时就得强转.List list = new ArrayList();list.add(1); //Interger类型Object ele = list.get(0); //现在需要调用Interger类中的方法I nterger num = (Interger) ele;System.out.printl...

dreamzuora的博客 3487

实时多目标跟踪(MOT):SORT与DeepSORT优化

实时多目标跟踪(MOT):SORT与DeepSORT优化​ ,人工智能,计算机视觉,大模型,AI,本文围绕实时多目标跟踪中的 SORT 与 DeepSORT 算法展开,阐述了两者原理、实现及优化。SORT 结合卡尔曼滤波和匈牙利算法,依赖目标检测,实时性好但复杂场景表现欠佳。DeepSORT 在其基础上引入外观特征,采用级联匹配,提升了跟踪精度和鲁棒性。还探讨了两种算法在检测、运动模型、外观特征等方面的优化方向,以及应用场景与选择建议,为相关应用和研究提供参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 20万+

【网络安全】零基础入门网络安全劝退指北

作为从16年接触网络安全的小白,谈谈零基础如何入门网络安全,有不对的地方,请多多指教。 这些年最后悔的事情莫过于没有把自己学习的东西积累下来形成一个知识体系。 后续我也会陆续的整理网络安全的相关学习资料及文章,与大家一起探讨学习。 如何入门 简单了解网络安全 网络安全就是指的确保网络系统中的数据不被别人破坏,而网安工程师就是涉及程序来维护网络安全。 网安方向有很多职位,比如安全产品工程师,安全分析师,数据恢复工程师,网络架构工程师,安全编程工程师,以及网络集成工程师等。 工作内容主要包括: 安全评测,风

互联网老辛 4586

java学习笔记11——泛型

总结:1.自定义泛型类\接口1.1 格式1.2 使用说明① 我们在声明完自定义泛型类以后,可以在类的内部(比如:属性、方法、构造器中)使用类的泛型。② 我们在创建自定义泛型类的对象时,可以指明泛型参数类型。一旦指明,内部凡是使用类的泛型参数的位置,都具体化为指定的类的泛型类型。③ 如果在创建自定义泛型类的对象时,没有指明泛型参数类型,那么泛型将被擦除,泛型对应的类型均按照object处理,但不等价于object。- 经验:泛型要使用一路都用。要不用,一路都不要用。

qq_58956810的博客 1221

ArcGIS Pro符号化教程

本文详细介绍了ArcGIS Pro的软件设置和符号化操作步骤。主要包括:1)设置默认工程目录和关闭地图自动加载;2)创建新工程的基本流程;3)点要素的单一符号化方法,包括样式修改和图层调整;4)图表符号显示过滤器的使用,涉及字段添加、图表类型选择和背景设置。文章还提供了操作截图和数据下载链接,适合GIS初学者学习ArcGIS Pro的基础符号化操作。

WwLK123的博客 549

Kotlin泛型学习篇

有时你想说,你对类型参数一无所知,但仍然希望以安全的方式使用它。这里的安全方式是定义泛型类型的这种投影,该泛型类型的每个具体实例化都会是该投影的子类型。仅使用 Kotlin 时,您不太可能需要显式声明绝对不可为 null 的类型,因为 Kotlin 的类型推断会为您处理此问题。这么做毫无意义, 因为我们可以像以前一样在该对象上调用所有相同的方法,所以更复杂的类型并没有带来价值。由于类型擦除,并没有通用的方法在运行时检测一个泛型类型的实例是否通过指定类型参数所创建 ,并且编译器禁止这种。但这样会有一些影响。

子冉冰清的博客 2057

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

泛型学习

泛型学习:https://www.cnblogs.com/coprince/p/8603492.html

转载的svn使用 224

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java泛型学习

一、 序言 一直在用的语言是Java,本以为掌握的已经不错了,但最近面试才发现之前自己只是停留在熟料使用的状态,距离编写出优雅,高可复用的代码还有一定的距离。强烈建议大家有机会一定要去看一下JDK源码,写的非常漂亮,可以学到不少东西! 二、 泛型 为什么要使用泛型? 进行日常开发时,当面对有重复的代码时,我们自然而然的将公共部分抽取出来封装成一个函数或方法,然后进行频繁调用。同样的道理,在进行功...

Michael Hsu 393

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Go泛型学习笔记

Go泛型内容不多可类比C++这种编程语言,共编写了泛型函数,泛型类型、接口约束、处理不同类型的值、处理泛型切片的常见demo举例

执念斩长河 553

Kotlin学习手记--泛型、泛型约束、泛型型变、星投影、泛型擦除、内联特化

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。不论遇到什么困难,都不应该成为我们放弃的理由!如果你看到了这里,觉得文章写得不错就给个赞呗?《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,

2401_84132544的博客 727

学习“泛型”

泛型的学习总结,自己画的思维导图 查看原始图片:图片->右键->查看图像

tomxue0126的专栏 2254

泛型编程 - 学习/实践

主要用于了解,学习,掌握泛型编程的本质,使用。

"代码"的日常搬运 2990

C#泛型学习笔记

本笔记摘抄自:https://www.cnblogs.com/dotnet261010/p/9034594.html,记录一下学习过程以备后续查用。 一、什么是泛型 泛型是C#2.0推出的c#教程 新语法,不是语法糖,而是2.0由框架升级提供的功能。泛型类就类似于一个模板,可以在需要时为这个模板传入任何我们需要的类型。 二、为什么使用泛型 下面代码演示输出几种类型的相关信息: class Program { /// <summary> /// 打印帮助类

chinaherolts2008的博客 214

java泛型学习,获取泛型的实际类型,泛型知识点总结

                   java泛型学习,获取泛型的实际类型,泛型知识点总结   一、什么是泛型 1、把明确数据类型的工作推迟到创建对象或者方法调用的时候才去确定的特殊类型。 2、格式: Page&lt;数据类型&gt; , 注意: 该数据类型只能是引用类型。 3、泛型的种类: 泛型类 如: public class Generic&lt;T&gt; {} 泛型接口 如...

HaHa_Sir的博客 4379

【用Java学习数据结构系列】初识泛型

好久没有更新文章了,大概断更了20天,想着今天就写一下文章吧!最近也是又温习了一下数据结构,其实之前我写过关于数据结构的一个专栏那个专栏是写了顺序表,链表,栈和队列,但是那时是用C语言实现的,虽然数据结构不局限于语言,但是总归在语言的使用上有所不同,毕竟面向不同,一个是面向过程的C语言,一个是面向对象的Java。所以这次我打算起一个数据结构的Java专栏,当然由于之前已经写过有些地方会写得简洁一点,模糊的话大家可以去看一下前面得文章哦。今天是关于泛型的哦!

2302_81249757的博客 3860

Kotlin学习(8)泛型

报错//因为Kotlin中有类型推断的功能,有些类型参数可以直接不写,所以mutableMapOf后面的参数类型可以不写我们直接声明一个带参数类型的Container类,代码如下:测试代码如下://被具体化为println(container) //输出: container = Container(key = 1, value = A)在泛型接口和泛型类中,我们都在类名和接口名后声明了泛型参数。而实际上也可以或者在包级函数中直接声明泛型参数。

2401_83601703的博客 1020

Java泛型学习系列【转】

Java泛型学习系列

kermit的博客 418
上一篇: android性能优化学习
下一篇: android自定义圆角imageview学习
是辉仔啊
博客等级 码龄12年 13粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值