泛型

疯狂Kotlin讲义阅读实践篇——第11章 注解

点点圈 提交于 2019-12-15 22:48:59
目录 一、前言 二、本章要点 11.1 Kotlin 注解入门 11.1.1 定义注解 11.1.2 注解的属性和构造器 11.2 元注解 11.2.1 使用@Retention 11.2.2 使用@Target 11.2.3 使用@MustBeDocumented 11.2.4 使用@Repeatable 标记可重复注解 11.3 使用注解 11.3.1 提取注解信息 11.3.2 使用注解的示例 11.4 Java 注解与 Kotlin 的兼容性 11.4.1 指定注解的作用目标 11.4.2 使用 Java 注解 11.5 本章小结 一、前言 通过上一篇文章我们阅读了《疯狂Kotlin讲义》的 Kotlin 的泛型,主要介绍了 Kotlin 提供的泛型支持。本章详细介绍了如何定义泛型接口、泛型类,以及如何从泛型类、泛型接口派生子类或实现类,并深入讲解了泛型类的本质。详细可参考链接: 疯狂Kotlin讲义阅读实践篇——第10章 泛型 这篇文章我们将阅读学习 Kotlin 的注解 二、本章要点 11.1 Kotlin 注解入门 11.1.1 定义注解 11.1.2 注解的属性和构造器 11.2 元注解 11.2.1 使用@Retention 11.2.2 使用@Target 11.2.3 使用@MustBeDocumented 11.2.4 使用@Repeatable

二、泛型

六月ゝ 毕业季﹏ 提交于 2019-12-15 11:40:18
Java 泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现? 答案是可以使用 Java 泛型。 使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。 泛型方法 你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。 下面是定义泛型方法的规则: 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)。 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。 实例 下面的例子演示了如何使用泛型方法打印不同字符串的元素:

小白都能看得懂的java泛型

徘徊边缘 提交于 2019-12-14 22:18:26
一、什么是泛型 泛型是Java SE 1.5的新特性,可以适应不同的很多很多类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 二、为什么使用泛型 1.使用泛型能写出更加灵活通用的代码 2.泛型将代码安全性检查提前到编译期 使用泛型后,能让编译器在编译的时候借助传入的类型参数检查对容器的插入,获取操作是否合法,从而将运行时ClassCastException转移到编译时 //没有泛型的情况下使用集合 public static void noGeneric () { ArrayList names = new ArrayList(); names.add( "张三" ); names.add( "李四" ); names.add( 123 ); //编译正常 } //有泛型的情况下使用集合 public static void useGeneric () { ArrayList<String> names = new ArrayList<>(); names.add( "张三" ); names.add( "李四" ); names.add( 123 ); //编译不通过 } 3.泛型能够省去类型强制转换 在JDK1.5之前

算法笔记1 背包、队列和栈

大兔子大兔子 提交于 2019-12-14 04:29:16
文章目录 1 泛型 2 迭代 3 Bag 4 Quene 5 Stack 5.1 定容栈 5.2 实现一个泛型的定容栈 5.3 调整数组的大小 API中均包含以下四项: 1.无参构造函数 2.添加单个元素 3.是否为空 4.返回集合大小 1 泛型 Stack < String > stack = new Stack < String > ( ) ; String处是一个类型占位符,可填其余类型 2 迭代 //foreach语句,打印整个集合 Quene < Transaction > collection = new Quene < Transaction > ( ) ; for ( Transaction t : collection ) { StdOut . println ( t ) ; } //与如下的while语句等价 Iterator < Transaction > i = collection . iterator ( ) ; while ( i . hasNext ( ) ) { Transaction s = i . next ( ) ; StdOut . println ( s ) ; } 任意可迭代的集合数据类型中需要实现的东西: 1.实现一个Iterator()方法并返回一个Iterator对象; 2.Iterator类必须包含两个方法:hasNext(

如何使用反射调用泛型方法?

倾然丶 夕夏残阳落幕 提交于 2019-12-13 19:41:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 当类型参数在编译时未知,而是在运行时动态获取时,调用通用方法的最佳方法是什么? 考虑以下示例代码-在 Example() 方法内部,使用存储在 myType 变量中的 Type 调用 GenericMethod<T>() 的最简洁方法是什么? public class Sample { public void Example(string typeName) { Type myType = FindType(typeName); // What goes here to call GenericMethod<T>()? GenericMethod<myType>(); // This doesn't work // What changes to call StaticMethod<T>()? Sample.StaticMethod<myType>(); // This also doesn't work } public void GenericMethod<T>() { // ... } public static void StaticMethod<T>() { //... } } #1楼 通过使用 dynamic 类型而不是反射API,可以大大简化使用仅在运行时知道的类型参数的泛型方法的调用。

Incompatible parameter types in lambda expression: expected Object but found Apple

落爺英雄遲暮 提交于 2019-12-12 07:35:42
public static List<Apple> filerApples(List<Apple> inventory, Predicate<Apple> predicate)原因是在开始时Predicate没有加上<Apple>泛型导致,所以,需要检查一下,是否有类没有加上泛型 来源: CSDN 作者: xianrenmodel 链接: https://blog.csdn.net/xianrenmodel/article/details/103497191

第二章 分布式计算泛型

房东的猫 提交于 2019-12-12 03:56:58
第二章 分布式计算泛型 分布式计算泛型也就是 分布式计算模式例子或模型 。 分布式计算泛型包括消息传递、客户/服务器、p2p、消息系统、远程过程调用、分布式对象、网络服务、移动代理和云服务九种常见泛型。 2.1 消息传递泛型 消息传递是进程之间互相通信的基本途径。 工作原理:两个进程间传递消息,一个为发送者,一个为接收者。发送者发送一条请求消息,该消息被传送到接收者,由接收者处理并发送一条应答消息。 消息传递模式是最基本的传递消息的泛型,很多即时通信工具都是基于该泛型的具体应用。 2.2 客户/服务器泛型 工作原理:客户/服务器泛型由客户端和服务器组成,为两个协作进程分配非对称角色,客户进程向服务器发起请求并等待响应,服务器进程等待来自客户的请求给出回应。 客户/服务器泛型是网络应用中使用最多的一种分布式计算泛型。 2.3 p2p泛型 P2P泛型源于P2P网络(又称为对等计算机网络)。p2p网络是一种无中心服务器,依赖用户群交换的互联网体系,每个用户端既是一个节点,又有服务器的功能。可以说是没有服务器,也可以说每个用户端都是一台服务器。 工作原理:服务器进程提供服务,客户进程通过服务器访问服务。 2.4 消息系统泛型 消息系统泛型或面向对象的中间件是在基本的消息传递泛型的基础上扩展而来的。 工作原理:消息系统充当独立的进程之间的中介,不同的进程以非耦合方式通过消息系统异步地交换消息

Java泛型的一些笔记(九)

南笙酒味 提交于 2019-12-12 02:47:46
泛型类 class Generics <T>{ private T item; ..... } 泛型接口 public interface Generics<T> { public T next(); } 泛型方法 public <T> T method(Generics<T> generics){ .............. } 泛型通配符 类型通配符一般是使用?代替具体的类型实参,注意了,此处’?’是类型实参,而不是类型形参 public <T> T method(Generics<?> generics){ .............. } 泛型上下界 类型实参只准传入某种类型的父类或某种类型的子类 public <T> T method(Generics<? extends Number> generics){ .............. } 静态泛型方法 必须将静态方法也定义成泛型方法 参考1:https://www.cnblogs.com/coprince/p/8603492.html 参考2:https://blog.csdn.net/WillCold/article/details/12848617 来源: CSDN 作者: 我的小封 链接: https://blog.csdn.net/suicuney/article/details/103458166

20191209-20191210学习总结

拟墨画扇 提交于 2019-12-11 18:20:06
20191209学习总结 泛型类 泛型集合类可以将类型参数用作它所存储的对象的类型的占位符。 一般使用E、T、K、V、? E代表element,T代表type,K代表key,V代表value。 父类泛型,子类也必须是泛型。 自定义栈 运用栈的特点: 内存快一些,后进先出。 向下限定 <E extends B> //泛型B的子类<? extends B> //只要是继承了B的子类 向上限定 <? super B> //B和B的父类 完成后进行休息操作 Thread.sleep(1000); //完成后有1000ms的休息 20191210学习总结 内部类 内部类分为成员内部类,局部内部类,匿名内部类,静态内部类。 其中匿名内部类用的是最多的。 内部类解决了java没有多继承的问题。 成员内部类 成员内部类可以很方便的调用外部类的属性。 局部内部类 局部内部类没有访问修饰符,局部变量也没有访问修饰符。 局部内部类或者匿名内部类,如果要使用外部类的局部变量,那么这个局部变量必须是final修饰的。 在JDK1.8之前,必须用final声明,JDK1.8之后,编译会自动加上final修饰。 静态内部类 静态内部类中public static class 顺序不能换。 在静态内部类中,不能访问外部类中非静态的属性和方法。 匿名内部类 接口或者抽象类可以通过实例化直接实现。 来源: https

C# 序列化与反序列化Serialization之Json Xml Binary Soap JavaScript序列化

时光总嘲笑我的痴心妄想 提交于 2019-12-11 17:05:27
所谓的序列化其实就是把一个内存中的对象信息转化成一个可以持久化保存的形式,方便保存数据库和文件或着用于传输, 序列化的主要作用是不同平台之间进行通信与信息的传递保存等,常用的有序列化有Json Xml Binary Soap JavaScript序列化等,当然我们也可以使用第三方的序列化类库,第三方的序列化类库可以参照网上的,这里不再赘述, 本文主要介绍Json Xml Binary Soap JavaScript等6种序列化的方法, 添加引用以下类库 using System.Runtime.Serialization.Json;//DataContractJsonSerializer序列化 using System.Xml.Serialization;//XmlSerializer序列化 using System.Runtime.Serialization.Formatters.Binary;//BinarySerializer序列化 using System.Runtime.Serialization.Formatters.Soap;//SoapSerializer序列化 using System.Web.Script.Serialization;//JavaScriptSerializer序列化 代码如下: using System; using System.Text;