泛型

fastjson与多级泛型(一)

霸气de小男生 提交于 2019-12-28 14:38:55
1.问题背景 知道方法的Method和方法的响应字符串,将字符串转换为returnType。Method可能包含多级泛型 2.核心内容 method.getGenericReturnType 获取方法返回类型泛型类 ParameterizedTypeImpl 记录泛型嵌套关系 3.基本思路 先利用getGenericReturnType 获取方法返回类型泛型类,然后对返回的Type做判断,分两部分进行处理。核心代码如下: public static Object transfer1(String req,String className,String methodName ) throws Exception{ Class clazz=Class.forName(className); Method method=clazz.getDeclaredMethod(methodName); Type type=method.getGenericReturnType(); if(type instanceof ParameterizedType){ ParameterizedType type1=(ParameterizedType) type; ParameterizedTypeImpl beforeType = new ParameterizedTypeImpl(type1

泛型和List

孤者浪人 提交于 2019-12-27 19:05:08
泛型 泛型的引入和泛型定义与使用和含有泛型的类的实例 测试类 泛型的规定 List接口 List接口介绍 有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常 允许重复的元素 List接口: l 它是一个元素存取有序的集合。例如,存元素的顺序是 11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。 l 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。 l 集合中可以有重复的元素,通过元素的 equals方法,来比较是否为重复的元素。 List接口的常用子类有: l ArrayList集合 l LinkedList集合 常用方法 来源: https://www.cnblogs.com/www1842564021/p/12109177.html

20182307 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结

烈酒焚心 提交于 2019-12-27 13:49:59
目录 20182307 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 学习进度条 点评过的同学博客和代码 20182307 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结 教材学习内容总结 第12章 算法分析 从算法效率角度分析了软件开发的目标,介绍了算法分析的概念,引进了增长函数与时间复杂度的概念。通过比较不同的算法的增长函数与时间复杂度来分析算法的效率。 第14章 栈 引进了栈这个“先进后出”的线性集合的概念,介绍了栈相关的push,pop,peek等操作。与继承、多态的知识相关联引出了泛型的概念,并以计算后缀表达式为例演示了栈的应用。 第15章 队列 引进了队列这个“先进先出”的线性集合的概念,介绍了队列的enqueue,dequeue等操作。介绍了循环数组解决队空队满情况的方法。 学习笔记: 计算机系统中最重要的资源之一是 CPU时间 。完成具体任务的算法效率是决定 程序执行速度 的一个主要因素。 增长函数 显示了与问题大小相关的时间或空间利用率。 算法的阶 由算法增长函数的主项决定。 处理器速度和内存不能弥补算法增长函数的上界。 集合是收集并组织其他对象的对象。主要分为两类:线性和非线性的。 栈是一个线性集合,处理方式是

[C#]浅谈协变与逆变

*爱你&永不变心* 提交于 2019-12-27 09:15:36
看过几篇说协变与逆变的博客,虽然都是正确无误的,但是感觉都没有说得清晰明了,没有切中要害。 那么我也试着从我的理解角度来谈一谈协变与逆变吧。 什么是协变与逆变 MSDN的解释: https://msdn.microsoft.com/zh-cn/library/dd799517.aspx 协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型。泛型类型参数支持协变和逆变,可在分配和使用泛型类型方面提供更大的灵活性。 一开始我总是分不清协变和逆变,因为MSDN的解释实在是严谨有余而易读不足。 其实从中文的字面上来理解这两个概念就挺容易的了: "协变"即"协调的转变","逆变"即"逆向的转变"。 为什么说"能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型"是协调的,而"能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型"是逆向的呢,看这两行代码: object o = ""; string s = (string) o; string类型到object类型,也就是派生类到基类,是可以隐式转换的,因为任何类型向基类的转换都是类型安全的,所以认为这一转变是协调的。 object类型到string类型,也就是基类到派生类,就只能是显式转换

java泛型

ぃ、小莉子 提交于 2019-12-27 04:23:32
java泛型方法 public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() { return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> c1.getKey().compareTo(c2.getKey()); } <K extends Comparable<? super K>, V> :类型参数声明 K extends Comparable<? super K>, V :类型参数 (泛型类型名称的标识符) 类型参数 1.Comparator<Map.Entry<K,V>> 声明返回值类型 2.实际参数类型的占位符 3.代表引用型类型 4.不能是原始类型(像int,double,char的等) 有界的类型参数: <K extends Comparable<? super K>, V> 1.extends 2.implements 3.super 4.上界:Comparable<? super K> java泛型类 (参数化的类或参数化的类型) public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>,

Java 泛型进阶

天大地大妈咪最大 提交于 2019-12-27 02:44:57
擦除 在泛型代码内部,无法获得任何有关泛型参数类型的信息。 例子1: //这个例子表明编译过程中并没有根据参数生成新的类型 public class Main2 { public static void main(String[] args) { Class c1 = new ArrayList<Integer>().getClass(); Class c2 = new ArrayList<String>().getClass(); System.out.print(c1 == c2); } } /* output true */ 在 List<String> 中添加 Integer 将不会通过编译,但是 List<Sring> 与 List<Integer> 在运行时的确是同一种类型。 例子2: //例子, 这个例子表明类的参数类型跟传进去的类型没有关系,泛型参数只是`占位符` public class Table { } public class Room { } public class House<Q> { } public class Particle<POSITION, MOMENTUM> { } public class Main { public static void main(String[] args) { List<Table> tableList =

《集合与泛型》

二次信任 提交于 2019-12-27 00:09:46
day15 课程 part1.不带泛型的集合 List集合 使用Arraylist类来实现 List list = new ArrayList ( ) ; 因为list类是接口,所以需要Arraylist类来实现接口,这里使用了多态的创建方式 list . add ( 1 ) ; list . add ( "xiaoye" ) ; list . add ( "yang" ) ; list . add ( true ) ; User user = new User ( "liushuai" , 16 ) ; list . add ( user ) 使用add()方法,将数据传入到集合内,这里因为没有用到泛型,所以数据类型为object类,笔者另定义了一个User类与它的带参构造方法,即证明对象也能存入集合中 list . add ( 1 , 100 ) ; 此处add方法的作用是在下标为1的位置插入一个类型为integer的100的值 for ( int i = 0 ; i < list . size ( ) ; i ++ ) { Object object = list . get ( i ) ; System . out . println ( object ) ; } 使用size()方法查看集合长度,get(i)方法是取出下标为i的元素,上面的代码是遍历集合的第一种方式

如何获得泛型类型T的类实例

孤街浪徒 提交于 2019-12-26 19:41:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我有一个泛型类 Foo<T> 。 在 Foo 的方法中,我想获取类型T的类实例,但是我无法调用 T.class 。 使用 T.class 绕过它的首选方法是什么? #1楼 我在抽象的泛型类中遇到了这个问题。 在这种情况下,解决方案更简单: abstract class Foo<T> { abstract Class<T> getTClass(); //... } 然后在派生类上: class Bar extends Foo<Whatever> { @Override Class<T> getTClass() { return Whatever.class; } } #2楼 这是可能的: class Foo<T> { Class<T> clazz = (Class<T>) DAOUtil.getTypeArguments(Foo.class, this.getClass()).get(0); } 您需要 svn / trunk / dao / src / main / java / com / googlecode / genericdao / dao / DAOUtil.java中的两个函数 。 有关更多说明,请参见 反映泛型 。 #3楼 假设您有一个通用的抽象超类: public abstract class

Unity 单例的父类模板

半世苍凉 提交于 2019-12-26 19:13:26
C#单例父类 转载 正文 如何设计这个单例的模板? 总结 转载 终于找到了之前关于单例父类的一个问题解决方法,是使用反射解决。 这里转载分享一下: Unity 游戏框架搭建 (二) 单例的模板 正文 如何设计这个单例的模板? 先分析下需求,当设计一个manager时候,我们希望整个程序只有一个该manager对象实例,一般马上能想到的实现是这样的: public class XXXManager { private static XXXManager instance = null ; private XXXManager { // to do ... } public static XXXManager ( ) { if ( instance == null ) { instance = new XXXManager ( ) ; } return instance ; } } 如果一个游戏需要10个各种各样的manager,那么以上这些代码要复制粘贴好多遍。重复的代码太多!!!想要把重复的代码抽离出来,怎么办?答案是引入泛型。实现如下: using System ; using System . Collections . Generic ; using System . Text ; using System . Reflection ; namespace

C#静态类+泛型实现单例模式

那年仲夏 提交于 2019-12-26 16:32:22
/// <summary> /// 管理单实例 /// </summary> /// <typeparam name="T">Type of the singleton class.</typeparam> public static class Singleton < T > where T : class { # region Fields /// <summary> /// 目标类 /// </summary> static volatile T _instance ; /// <summary> /// The dummy object used for locking. /// </summary> static object _lock = new object ( ) ; # endregion Fields # region Constructors /// <summary> /// 构造函数 /// </summary> static Singleton ( ) { } # endregion Constructors # region Properties /// <summary> /// 获取T实例 /// </summary> public static T Instance { get { if ( _instance == null ) lock (