泛型

JAVA之泛型类与List的使用

匿名 (未验证) 提交于 2019-12-02 21:52:03
泛型 泛型类的诞生:增加编译期间的类型检查,取消类型转换的应用 泛型类的分类: 1) 泛型类:尖括号<>是泛型的标志 2) E是类型变量(Type variable)变量名一般要大写 3) E在定义时是形参,代表的意思是MyArrayList最终传入的类型,但现在还不知道 注意:泛型类可以一次有多个类型变量,用逗号分割 泛型是作用在编译期间的一种机制,即运行期间没有泛型的概念 泛型类的使用 //定义了一个元素是Book引用的MyArrayList MyArrayList books=new MyArrayList(); books.add(new Book()); //会产生编译错误,Person类型无法转换为Book类型 books.add(new Person()); //不需要做类型转换 Book book=book.get(0); //会产生编译错误,Book类型无法转换为Person类型 Person person=book.get(0); 注意:泛型的使用方式:只需要在所有类型后边跟尖括号,并且尖括号内是真正的类型,即E可以看做最后的类型(Book只能想象成E的类型,但实际上E的类型还是Object 泛型总结 1) 泛型是为了解决某些容器,算法等代码的通用性而引入,并且能在编译期间做类型检查 2) 泛型利用的是Object是所有类的祖先类

Java学习笔记【保持更新】

匿名 (未验证) 提交于 2019-12-02 21:52:03
主要参考资料:https://www.bilibili.com/video/av56034035; https://www.bilibili.com/video/av61604219 本文仅用于学习,如有侵权,请联系我,一定删除 语言特性 由C和C++继承了许多成分,变量声明、操作符、参数传递和控制流程等完全相同。 纯粹的面向对象 舍弃了指针(以引用取代)、运算符重载、多重继承等 增加了垃圾回收、泛型编程、类型安全的枚举、不定长参数和自动装/拆箱 易学 分布式 健壮 :丢弃指针,自动回收(免去了程序员忘记回收的问题) 开源社区成熟 解释型 原生多线程 JAVA技术平台 SE:俗称核心JAVA JAVA学习流程 Java是一个统称 包含javase 与Javaee(还有一个几乎没人用的javame) 是Sun公司,也就是现在的Oracle(把Sun给收购了)公司的一门面向对象的开源语言。 javase 是java的一部分,也是基础的基础,主要是用来做桌面程序的,就像我们平时下载用的那些软件,也就是楼上说的那些客户端程序。但是用Java做软件的话,前途不明朗。 jsp 是一种动态的页面,运行于服务器(tomcat、 jboss等),里面可以嵌套有html 或javase、Javascript的代码。 至于javaweb那就大了,它包含了以上所有的东西,并且还有一些框架(例如

java的Array和List相互转换

匿名 (未验证) 提交于 2019-12-02 21:52:03
1.Array转List,通过java.util.Arrays.asList(T... a)参数是可变泛型参数 注意,Arrays.asList返回的类型是不可变长度的集合,底层是final修饰的泛型数组【泛型数组可以理解为Object[]】 和我们常用的java.util.ArrayList的区别,java.util.ArrayList底层对象数组没有加final关键词修饰 所以Arrays.asList返回的集合不能添加和删除,可以修改指定索引的内容 2.List转Array用.toArray(T[] a) 来源:博客园 作者: xiaostudy 链接:https://www.cnblogs.com/xiaostudy/p/11406681.html

Java泛型

匿名 (未验证) 提交于 2019-12-02 21:52:03
1、什么是泛型 泛型就是 参数类型化 ,简单说就是在定义类 接口 方法时时不支持具体的参数类型的。只有在实际使用时才确定。 2、为何用泛型 我觉得有两点好处 public static void main(String[] args) { List myList = new ArrayList(); myList.add(new Integer(1)); Integer value = (Integer)(myList.get(0)); System.out.println("value=" + value); }   Father<Teacher> fatherTeacher = new Father<>(new Teacher());Father<Doctor> fatherDoctor = new Father<>(new Doctor()); public class Father<T> { private T job; public Father(T job){ this.job = job; } public void work(){ System.out.println("my job is "+ job); } }    3、如何使用泛型 泛型可以使用在类(泛型类)、 接口(泛型接口、 方法(泛型方法)中。 泛型类 : 如上述的例子 泛型接口 : 样例 public

&lt;? extends T&gt; 及 &lt;? super T&gt; 重温

匿名 (未验证) 提交于 2019-12-02 21:52:03
本文针对泛型中<? extends T> 及<? super T>的主要区别及使用用途进行讨论. 作者尽量描述其原理,分析疑点. 希望对复习Java泛型使用,项目架构及日常使用有帮助 也是作者作为学习的加强记忆 设定有一盘子(容器),可以存放物品,同时有食物,水果等可以存放在容器里面. import com.google.common.collect.Lists; //引入guava的Lists工具方便生产List实例 class Food { /** name*/ protected String name = "Food"; /** 打印食物名称*/ public void echo() { System.out.println(name); } } class Fruit extends Food {} class Apple extends Fruit { public Apple() { name = "Apple"; } } class Pear extends Fruit { public Pear() { name = "Pear"; } } class Plate<T> { private T item; public Plate() {} public Plate(T item) { this.item = item; } public void set(T t

Java中获取泛型对象中的类型

匿名 (未验证) 提交于 2019-12-02 21:52:03
在方法调用的时候,有时候需要传一个Class<T>泛型过来。 但是,有时候,传过来的Class又是泛型。 比如下面代码 List<User> 这时,传过去的只能是 List.class 此时就达不到我们想要的类型,List<User>的效果。 在这里只要实现一个类就可以获取到List<User> public class DefaultTargetType<T> { private Type type; private Class<T> classType; @SuppressWarnings("unchecked") public DefaultTargetType() { Type superClass = getClass().getGenericSuperclass(); this.type = ((ParameterizedType) superClass).getActualTypeArguments()[0]; if (this.type instanceof ParameterizedType) { this.classType = (Class<T>) ((ParameterizedType) this.type).getRawType(); } else { this.classType = (Class<T>) this.type; } } } 结果:

Java基础

匿名 (未验证) 提交于 2019-12-02 21:52:03
一、JAVA 异常分类及处理 如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下 会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器。 Error 1. Error 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。 Exception(RuntimeException、CheckedException) 2. Exception又有两个分支 , 一个是运行时异常 RuntimeException , 一个是 CheckedException。 RuntimeException 如 : NullPointerException 、ClassCastException;RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。如果出现 RuntimeException,那么一定是程序的错误.。 CheckedException:一般是外部错误,这种异常都发生在编译阶段,Java 编译器会强制程序去捕获此类异常,即会出现要求你把这段可能出现异常的程序进行 try catch。 二、反射 动态语言

java泛型――桥方法

匿名 (未验证) 提交于 2019-12-02 21:40:30
【0】README 0.1) http://www.cnblogs.com/ggjucheng/p/3352519.html 1.1)继承泛型类型的多态麻烦。(―― 子类没有覆盖住父类的方法 ) 看看下面这个类SonPair <span style="color:#000000"><code><span style="color:#000088 !important">class</span> <span style="color:#4f4f4f !important">SonPair</span> <span style="color:#000088 !important">extends</span> <span style="color:#4f4f4f !important">Pair</span><<span style="color:#4f4f4f !important">String</span>>{ <span style="color:#000088 !important">public</span> <span style="color:#000088 !important">void</span> setFirst(String fir){....} }</code></span> 很明显,程序员的本意是想在SonPair类中覆盖父类Pair的setFirst

TypeScript开发实战

大憨熊 提交于 2019-12-02 20:06:02
课程目录: 01、重塑“类型思维” 02、类型基础(1):强类型与弱类型 03、类型基础(2):动态类型与静态类型 04、编写你的第一个TypeScript程序 05、基本类型 06、枚举类型 07、接口(1):对象类型接口 08、接口(2):函数类型接口 09、函数 10、类(1):继承和成员修饰符 11、类(2):抽象类与多态 12、类与接口的关系 13、泛型(1):泛型函数与泛型接口 14、泛型(2):泛型类与泛型约束 15、类型检查机制(1):类型推断 16、类型检查机制(2):类型兼容性 17、类型检查机制(3):类型保护 18、高级类型(1):交叉类型与联合类型 19、高级类型(2):索引类型 20、高级类型(3):映射类型 21、高级类型(4):条件类型 22、ES6与CommonJS的模块系统 23、使用命名空间 24、理解声明合并 25、如何编写声明文件 26、配置tsconfig.json(1):文件选项 27、配置tsconfig.json(2):编译选项 28、配置tsconfig.json(3):工程引用 29、编译工具:从ts、loader到Bable 30、代码检查工具:从TSLint到ESLint 31、使用Jest进行单元测试 32、创建项目 33、组件与类型(1):函数组件与类组件 34、组件与类型(2):高阶组件与Hooks 35

c# 协变和逆变

一世执手 提交于 2019-12-02 19:30:39
C#可变性类型   可变性只支持引用类型,禁止用户定义的转换。 协变性   如果某个返回的类型可以由其子类替换,那么这个类型就是支持协变的 逆变性    如果某个参数类型可以由其父类替换,那么这个类型就是支持逆变的 可变性参数   只有接口和委托可以拥有可变的类型参数 in 参数是逆变 out 参数是协变 实例 public class A {} public class B:A 协变 子类变成父类 A b=new B();//协变可正常转换 逆变 父类变成子类 B b=new A();//这样会直接报错 B b=(B)(new A());//强制转换 泛型的协变和逆变 逆变   实例化参数是子类,泛型接口当中是父类,如果想要正常创建对象,需要在泛型参数上加上in标记 定义泛型接口 public interface IUserService<in T> { } 定义业务层实现接口 public class UserService: IUserService<A> { } 实例化 static void Main(string[] args) { IUserService<B> s =new UserService(); } 如果不加in的话,会报错 无法将类型“ConsoleApp6.IServer.UserService” 隐式转换为“ConsoleApp6.IServer