泛型

JAVA笔记1

烈酒焚心 提交于 2020-02-16 01:25:43
泛型 泛型,一定是为了规定某个属性、或者方法的入参、出参的类型! JAVA中的泛型声明,一定是写在<>里面的,所以是谁的泛型,看<>写在哪。 这个是类的声明: static class Genericdemo < T , k > { public T x ; public T Y ; public T getValue ( ) { return value ; } public Genericdemo ( T value , K key ) { super ( ) ; this . value = value ; this . key = key ; } } 这个是方法的声明: public < T > T tell ( T t ) { return t ; } 泛型配合反射 泛型里面要填反射得到的类的类型,不能用List这种。。。。因为<>里面放的东西不会作为java代码去进行执行。 所以只能用泛型背身的规则,在类上面设定一个泛型T,然后在方法里面用List。 反序列化 使用jackson进行反序列化需要指定类型时: 当想要获取复杂泛型的类类型时,不能用 ArrayList<HashMap>.class 。 需要借助工具类TypeReference,写成 new TypeReference<ArrayList<HashMap>>(){} 。 这个写法也是有讲究的

Springboot集成mybatis-plus报com.xly.entity.ClientNot Found TableInfoCache.

流过昼夜 提交于 2020-02-15 02:21:48
使用mybatis-plus版本为 3.1.0,springboot版本为2.2.4.RELEASE 实体类继承Model 泛型为该实体类 ,泛型一定要写,我就是因为这个报错 @Data @TableName ( "t_user_expand" ) @KeySequence ( value = "t_user_expand_id_seq" ) @EqualsAndHashCode ( callSuper = false ) public class UserExpand extends Model < UserExpand > { . . . } 重写Model类的pkVal()方法,return当前类的主键 @Override protected Serializable pkVal ( ) { return id ; } 实体类需要有对应的Mapper 并且该Mapper继承BaseMapper 泛型为该实体类 public interface UserExpandMapper extends BaseMapper < UserExpand > { . . . } 来源: CSDN 作者: 喝茶啃馒头 链接: https://blog.csdn.net/guashengzan0281/article/details/104312030

Java编程思想学习(十一) 泛型

廉价感情. 提交于 2020-02-13 08:02:20
1.概要 generics enable types (classes and interfaces) to be parameters when defining classes, interfaces and methods. 泛型能在定义类,接口和方法时将类型(类和接口)作为参数。和方法声明时的形式参数很类似,都是为了在不同的输入时重用相同的代码。不同的是形式参数输入的是 值 而泛型是 类型 。 2.为什么使用泛型 1.编译时更加强的(Stronger)类型检测 java编译器对泛型代码进行强类型检测,一旦检测到代码违反类型安全就发出类型错误。 修复编译错误要比运行错误容易,因为运行错误很难找到问题所在。 2.不用类型转换 //没有使用泛型 List list = new ArrayList(); list.add("without generics"); //需要强制类型转换 String s1 = (String) list.get(0); //使用泛型 List<String> list2 = new ArrayList<String>(); list2.add("generics"); String s2 = list2.get(0);//不需要转换 3.使程序员能实现适用更加普遍的算法 通过使用泛型,使程序员能实现普遍的算法,算法将是 能使用于不同类型的,能自定义的

Java泛型

半腔热情 提交于 2020-02-13 01:56:01
转载,具体来自以下连接: https://www.cnblogs.com/coprince/p/8603492.html https://segmentfault.com/a/1190000019606768 https://segmentfault.com/a/1190000014120746 JAVA编程思想第15章 来源: https://www.cnblogs.com/majestyking/p/12302015.html

JavaSE学习笔记-Day12

我怕爱的太早我们不能终老 提交于 2020-02-12 23:18:29
一. 容器和泛型的引入 不管是什么语言,在开发程序的过程中和数据打交道是必不可少的,为了更好地容纳这些数据,我们在之前的学习中就引入了数组的概念,这确实是容纳数据的好办法,但是单单数组是完全不能满足我们的需求的,因为我们对数据远远不止只有容纳的要求,更重要的是要管理数据。诚然,对数组中的元素也可以进行管理操作,不过需要自己敲代码,如果功能仅限于此,那么这就不是Java了。作为更强大的语言,Java自然要帮你写好各种管理数据的代码,你只需要傻傻地调用就可以了,Java把这些容纳、管理和操作数据的代码都封装成一些类,就成为了今天我们要学的——容器,也叫集合(Collection)。 容器有几点注意事项: Java的容器装的元素只能是一个 对象 。不过有包装类的存在,也不用担心基本数据类型装不进容器。 容器不止是像它字面上的意思——装东西,容器的强大之处是不单单要存储数据,还要帮你处理数据、管理数据。我们可以把容器理解成一个超级强化版的数据结构。 以下是Java容器类的 主要框架 : 现在我们还是来探讨一下Java那些写源码的人是怎么将任何类型的对象都可以存到一个容器的呢?这个问题在包装类的时候就已经想过了,Object[]数组实现(多态性)。好,现在又有一个新问题:我把乱七八糟的不同类型的对象全部放到一个容器里,那当我拿的时候还得挨个判断是不是我要的类型的数据再拿,这不废劲吗?的确

list的泛型

我怕爱的太早我们不能终老 提交于 2020-02-12 22:08:20
更新记录 【1】2020.02.12-21:26 1.完善内容 正文 在学习list集合时,我看到书上写list的格式时 List<E> list = new ArrayList<>(); 并且注明:E代表Java的泛型 作为一个还没学习泛型的小白,自然不知道啥是泛型 没事,书上说:例如:集合中的元素为字符串类型,那么E可以修改为String 那么,就很明白了(其实没明白) 接着就是写代码 List<int> list1 = new ArrayList<>(); List<int> list2 = new LinkedList<>(); 结果编译未通过 是啥原因呢? 原来,必须是继承了Object的对象才可以泛型 int是基本数据类型,所以不可以 所以就用包装类吧 正确写法: List<Integer> list1 = new ArrayList<>(); List<Integer> list2 = new LinkedList<>(); 来源: https://www.cnblogs.com/zythonc/p/12301066.html

C# 泛型

徘徊边缘 提交于 2020-02-12 19:43:59
在定义类或方法的时候,不清楚调用者会使用那种类型的参数,则可以先定义为泛型类型,在调用的时候再指定其类型 泛型分为泛型方法和泛型类,泛型方法的定义语法如下 void 方法名<泛型列表>() { // 方法体 } 泛型类的定义语法如下 public class 类名<泛型列表> { // 类体 } 泛型列表每个参数类型用 “,” 逗号隔开。 在程序中,泛型就是一个类型,只要是在类中定义了,就可以像使用普通类型一样使用 static void Method1<T>(T str) { Console.WriteLine("Method1:" + str); } Method1<string>("123"); --> 123 Method1<int>(12345); --> 12345 Method1<bool>(false); --> false Method1<bool>(1==1); --> true 根据调用者指定的类型不同,可以使用不同的参数,如果指定了string类型,但是参数不带“”双引号,就会报错 使用泛型类与使用泛型方法一致 public class Class1<T>{ public void Method1(T str) { Console.WriteLine("参数为:" + str); } } Class1<string> c = new Class1

C# 泛型委托和多播委托

孤街浪徒 提交于 2020-02-12 18:08:07
泛型委托的定义 泛型委托的作用可以使程序定义一个委托,满足多个需求,如需要定义一个int类型参数的委托和定义一个string类型类型的委托时,直接使用泛型,就可以减少多次定义委托 泛型委托定义时候只需要再方法名后加:<类型在方法中的名字> 类型可以是多个,多个类型之间用 ”,“ 逗号隔开 // 定义泛型委托 delegate void MyDelegate<T>(T str); // 定义返回值为泛型的委托 delegate Y MyDelegate1<T, Y>(T str); // 实例化泛型委托 MyDelegate<string> md = (str) => { Console.WriteLine("泛型委托"); Console.WriteLine("参数为:" + str); }; MyDelegate1<string, int> md1 = (str) => { Console.WriteLine("有返回值的泛型委托"); Console.WriteLine("参数为:" + str); return 1 + 1; }; 多播委托 多播委托也称为委托链,意思是委托的集合,使用+= 向集合中添加方法,使用-= 删除集合中的方法,在调用的时候统一调用 多播委托中的调用顺序不一定是添加的顺序 MyDelegate<string> md2 = new MyDelegate

容器和泛型

心不动则不痛 提交于 2020-02-11 12:42:17
容器概念 容器(Collection) :用来装其它对象的对象,比如数组。 数组优势:是一种简单的线性序列,效率高。数组劣势:不灵活,容量需要事先定义好。 容器的内容 : ( Map :存储键值对) 泛型概念 泛型(Generics)是JDK1.5以后增加的,它可以帮助我们建立类型安全的集合。泛型的本质是“数据类型的参数化”。我们可以把“泛型”理解为数据类型的一个占位符(形式参数),即告诉编译器,在调入泛型是必须传入实际类型。 如果不用泛型,功能实现的代码如下: /** * 测试没有泛型的情况,注意内部是Object对象 */ public class TestGeneric { public static void main ( String [ ] args ) { MyCollection mc = new MyCollection ( ) ; mc . set ( "jack" , 0 ) ; mc . set ( 123 , 1 ) ; Integer a = ( Integer ) mc . get ( 1 ) ; String b = ( String ) mc . get ( 0 ) ; } } class MyCollection { Object [ ] objs = new Object [ 5 ] ; public void set ( Object obj

java中易混淆的知识点

六眼飞鱼酱① 提交于 2020-02-11 12:31:31
声明抽象方法会造成以下两个结果: 如果一个类包含抽象方法,那么该类必须是抽象类。 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。 实现Java封装的步骤: 修改属性的可见性来限制对属性的访问(一般限制为private) 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法(get/set),用于对私有属性的访问 静态代码块: static{ } 实例化的时候在最先执行 super(): 调用父类的无参构造方法:super() 调用父类的有参构造方法:super(name,age) 调用父类的公有的方法:String name = super.name 调用父类的方法:super.say() final关键字: 使用final修饰的类不能被继承 使用final修饰的方法不能被子类覆盖 使用final修饰的变量不能被修改,即为常量 抽象类: 包含一个抽象方法的类是抽象类 抽象类和抽象方法都要用abstract关键字修饰 抽象方法只需要声明不需要实现 抽象类必须被子类(不是抽象类)重写类中的抽象方法 抽象类不能被实例化 java中多态性的表现: 方法的重载和重写 可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现(向上转型) 多态的实现方式: 方式一:重写:子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。 即外壳不变