泛型

JavaSE学习总结

孤者浪人 提交于 2019-12-05 11:23:42
1. Java的三大特性 1.1 封装 所谓的封装即是将使用访问修饰符private将对象的属性私有化,同时提供一些可以被外界访问其属性的方法,控制在程序中属性的读写访问级别。封装的目的在于保证安全性和简化编程,调用者不需要了解具体的实现过程,只需要调用即可。 1.2 继承 所谓的继承是指可在已存在的类上进行扩展,从而获得一个新的类。新类除了拥有父类的属性和方法之外,还可以定义自己的属性和方法,实现对原有类的扩展。通过继承可以很好地复用之前的代码。 注意事项 子类拥有父类对象的所有属性和方法(包括私有属性和方法),但父类的私有属性和私有方法,其子类是无法访问的,只是拥有; 子类可拥有属于自己的属性和方法,实现对父类的扩展; 子类可以对父类的一些方法进行自己独有的实现(即重写Override)。 1.3 多态 所谓多态,简单来说就是同一个行为(方法)在不同情况下有着不同的表现。 重点 多态有两种形式:编译时多态和运行时多态,即overload和override 编译时多态,即overload:重载最常见的地方就是一个类的构造方法。一个类可以有一个或多个构造方法,这些构造方法的名字相同,但具体参数不同; 运行时多态,即override:重写最常见的就是重写toString()方法。toString()是Object中的一个方法,而Object类是所有类的父类。所以当定义一个新的类时

spring 工具类大集合

Deadly 提交于 2019-12-05 11:05:33
接以前的文章 apache-commons 常用工具类 和文章 apache-commons 工具类扩展 小家 Spring 对 spring 的工具类做了详细的介绍(一) 这里我抽出一些好用的类,不是那种静态方法的类还有一些扩充来组成这篇博文 小家 Spring 工具类 (二) 路径匹配 org.springframework.util.AntPathMatcher 它可以帮助我们做一些路径的匹配,可以用于路径映射规则匹配 。? (任何单字符) * (任意数量字符) **(任意目录或文件) 占位符解析 org.springframework.util.PropertyPlaceholderHelper jdk 的类库中有一些用于字符串点位符的解析 ,像 String.format , MessageFormat String.format 只能顺序来解析类似像 C 语言那样的点位符,像 \d,\s 之类的。 MessageFormat 支持像 {0} ,{1} 这样的点位符。 但有时候我们更希望我们的点位符名称可以自定义,和 spring 的占位符一样的使用,则可以使用类 org.springframework.util.PropertyPlaceholderHelper ,你可以自定义占位符前缀后缀 ${ } 方法参数名解析 org.springframework.core

泛型委托示例

。_饼干妹妹 提交于 2019-12-05 10:56:37
public delegate TR Func<T1, T2, TR>(T1 p1, T2 p2); //泛型委托 TR委托返回类型 T1,T2 委托参数类型 class Simple {   static public string PrintString(int p1, int p2) //方法匹配委托   {     int total = p1 + p2;     return total.ToString();   } } class Program {   static void Main()     {       var myDel = new Func <int, int, string>(Simple.PrintString); //创建委托实例       Console.WriteLine("ToTal: {0}", myDel(15, 13));// 调用委托     } } 来源: https://www.cnblogs.com/bedfly/p/11921520.html

jdk1.6 和 jdk1.7 区别

孤人 提交于 2019-12-05 08:39:55
1、JDK1.6 以前的版本只支持 byte、char、short、int、枚举, JDK1.7 增加 String 类型 2、运用 List<String> tempList = new ArrayList<>(); 即泛型实例化类型自动推断 (1)在以前的版本中使用泛型类型,需要在声明并赋值的时候,两侧都加上泛型类型。例如: Map<String, String> myMap = new HashMap<String, String>(); (2)在Java SE 7中,这种方式得以改进,现在你可以使用如下语句进行声明并赋值: Map<String, String> myMap = new HashMap<>(); //注意后面的"<>" 语法上支持集合,而不一定是数组 final List<Integer> lists= [ 1,2,3,4,5,6]; 新增一些取环境信息的工具方法 File System.getJavaIoTempDir() // IO临时文件夹 File System.getJavaHomeDir() // JRE的安装目录 File System.getUserHomeDir() // 当前用户目录 File System.getUserDir() // 启动java进程时所在的目录5 switch中可以使用字串 String s = "test";

泛型基础复习

蓝咒 提交于 2019-12-05 05:23:03
泛型详解 概念:泛型即“参数化类型”;提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。所谓参数化类型就将类型由原来具体类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(类型形参),然后在使用时传入具体的类型(类型实参)。 Java中的泛型,只在编译阶段有效。泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型,编译阶段以后会去泛型化。 泛型的三种使用方式为:泛型类、泛型接口、泛型方法; 示例代码 public class FanXingTest2 { public static void main(String[] args) { Box<String, Double> box2 = new Box<String, Double>(); box2.setX("横坐标未知"); box2.setY(66.88); box2.ShowPoint(box2.getX(), box2.getY()); } } class Box<T1,T2>{ T1 x; T2 y; public T1 getX() { return x; } public void setX(T1 x) { this.x = x; } public T2 getY() { return y; } public void setY(T2 y) { this.y = y; }

C#中的协变和逆变

て烟熏妆下的殇ゞ 提交于 2019-12-05 04:38:58
1.为什么要有协变、逆变? 通常只有具备继承关系的对象才可以发生隐式类型转换,如Base b=new sub()。 协变和逆变可以使得更多的类型之间能够实现隐式类型转换、类型安全性有了保障。 2、为什么泛型接口要引入协变、逆变? 基于以上原因的同时、许多接口仅仅将类型参数用于参数或返回值。所以支持协变和逆变后泛型的使用上有了更大的灵活性 3. 为什么协变和逆变对泛型有很多限制? 否则的话,这样的类型转换不安全。 协变是一个细节化程度高的类型赋值给细节化程度低的类型类型。例如一个方法M,返回值是Giraffe(长颈鹿),你可以把M的返回值赋值给Animal(动物)类型,因为Animal类型是细节化程度底的类型,和Giraffe类兼容。那么方法是协变的,因为当你创建了协变接口,需要用到关键字out,返回值从方法中out。 这根本就不是协变的意思。这只是描述了赋值兼容性,两个类型可以兼容。 协变的准确定义是什么呢? 先不考虑类型,我们考虑数学意义上的整数。考虑整数之间的小于关系——≤。这里关系实际上就是一个方法,接受2个数,返回布尔值。 现在我们考虑一下对于整数的投影,投影指的是一个函数,接受一个整数,返回另一个整数。比如 z → z + z 我们可以定义为D(double), z → 0 - z定义为N for (negate), z → z * z,定义为S(square).

【J2SE】JAVA语法糖之-伪泛型

僤鯓⒐⒋嵵緔 提交于 2019-12-05 04:13:21
JAVA 语法糖之 - 伪泛型 泛型即参数化类型 首先看一个泛型例子: public static void main(String[] args) { List<String> strList = new ArrayList<String>(); strList.add("generic test!"); for (String str : strList) { System.out.println(str); } } 泛型擦出后(可以反编译 class 文件 )代码: public static void main(String[] args) { List strList = new ArrayList(); strList.add("generic test!"); for (String str : strList) System.out.println(str); } 编译后:返现泛型都不见了,泛型类型都变回原生类型 原因: 1 、 JVM 没有泛型这样的概念,所有的泛型类型编译过后全部变回原生类型,编译器用擦除法实现泛型 擦除规则: 如果泛型类型的类型变量没有 限定 (<T>) ,那么我们就用 Object 作为原始类型; 如果有限定 (<T extends XClass>) ,我们就 XClass 作为原始类型; 如果有多个限定 (<T extends

java常用工具集合

≡放荡痞女 提交于 2019-12-05 03:49:00
1、集合和数组的区别: ①集合中只能存储引用型数据,如果存储基本类型会自动装箱;数组既可以存储基本类型也可以存储引用类型的数据。 ②集合长度不固定,可任意扩充;数组长度固定。 2、Java的集合体系: (1)单列集合 :(顶层是Collection接口) ①List集合 (list是接口,要想使用里面的方法必须创建子类对象) :最常用的子类是ArrayList List集合中元素可重复,有序。通过创建子类对象使用:List list=new ArrayList(); eg:向List集合中添加三个元素并遍历打印 分析:向集合中添加元素的方法:add()、遍历集合的方式:for()、获取集合中元素个数的方法:size() package com.wang.list; import java.util.ArrayList; import java.util.List; /*List是接口,要创建子类对象 使用集合的步骤:创建集合对象-》创建元素对象-》将元素对象添加到集合对象中-》遍历集合 */ public class ListDemo01 { public static void main(String[] args) { //往List集合中添加3个学生对象,然后遍历 //创建集合对象 List list=new ArrayList(); //创建元素对象 Student s1

Golang的一些缺点

老子叫甜甜 提交于 2019-12-05 00:32:38
1.右大括号不允许换行,否则编译报错;不允许包含未使用的包(设置vscode工具,保存文件时可自动修改格式) 2.不允许有未使用的变量(vscode工具无法解决) 3.错误处理原始,虽然引入了defer、panic、recover处理出错后的逻辑,函数可以返回多个值,但基本依靠返回错误是否为空来判断函数是否执行成功,if语句较多,比较繁琐,程序没有java美观。(官方解释:提供了多个返回值,处理错误方便,如加入异常机制会要求记住一些常见异常,例如IOException,go的错误Error类型较统一方便,还有panic,recover,defer机制) 4.package main的变量不能被其他package引用(有时不方便) 5.[]interface{}不支持下标操作 6.struct没有构造和析构,一些资源申请和释放动作不太方便 7.变量和函数使用大小写来区分是否对包外可见 8.仍然保留C/C++的指针操作,取地址&,取值* 9.没有泛型 (官方解释:go是服务器语言,主要特点是可扩展,可读和高并发性。加入泛型会带来run-time和类型体系复杂度提高的代价,且可用空的interface 替代,现在go越来越成熟,可以考虑在go2版本中加入泛型这些特性) 来源: CSDN 作者: ferghs 链接: https://blog.csdn.net/busai2/article

fastjson带泛型反序列化的用法

ⅰ亾dé卋堺 提交于 2019-12-05 00:06:01
这个问题之前就遇到了,虽然猜到有现成解决办法,但是一直没有正面解决,今天找到了解决方案,mark一下。 主要就是一个TypeReference的使用。 直接上代码比较容易看懂。 1.泛型 public class PageEntity<T> { private List<T> result; public List<T> getResult() { return result; } public void setResult(List<T> result) { this.result = result; } } 这是一个示例的模板类 2. 反序列化 String json = readToString(new File(getRoodDir() + "kw.json")); PageEntity<CaterEsSource> pageEntity = JSON.parseObject(json, new TypeReference<PageEntity<CaterEsSource> >(){}); CaterEsSource试自定义的一个类。 代码自己应该说的很清楚了。 参考博客: https://www.jianshu.com/p/0dc13273e931 来源: https://www.cnblogs.com/betterwgo/p/11890238.html