泛型

linq

流过昼夜 提交于 2019-12-02 19:00:30
2018年10月24日 周三 13:30 linq深入.rtf 2018年10月8日 周一 13:28 linq深入 一、匿名类:[ C# 3.0/.NET 3.x 新增特性 ] 1.1 不好意思,我匿了    在开发中,我们有时会像下面的代码一样声明一个匿名类:可以看出,在匿名类的语法中并没有为其命名,而是直接的一个 new { } 就完事了。从外部看来,我们根本无法知道这个类是干神马的,也不知道它有何作用。 var annoyCla1 = new { ID = 10010, Name = "EdisonChou", Age = 25 }; Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyCla1.ID,annoyCla1.Name, annoyCla1.Age);   经过调试运行,我们发现匿名类完全可以实现具名类的效果: 1.2 深入匿名类背后    既然我们发现匿名类可以完全实现具名类的效果,那么我们可以大胆猜测编译器肯定在内部帮我们生成了一个类似具名类的class,于是,我们还是借助反编译工具对其进行探索。通过 Reflector 反编译,我们找到了编译器生成的匿名类如下图所示:   从上图可以看出:   (1)匿名类被编译后会生成一个 [泛型类] ,可以看到上图中的<>f__AnonymousType0<<ID>j_

Java 泛型: 什么是PECS(Producer Extends, Consumer Super)

青春壹個敷衍的年華 提交于 2019-12-02 17:07:55
什么是PECS? PECS指“Producer Extends,Consumer Super”。换句话说,如果参数化类型表示一个生产者,就使用<? extends T>;如果它表示一个消费者,就使用<? super T>,可能你还不明白,不过没关系,接着往下看好了。 下面是一个简单的Stack的API接口: 1 2 3 4 5 6 public class Stack<E>{ public Stack(); public void push(E e): public E pop(); public boolean isEmpty(); } 假设想增加一个方法,按顺序将一系列元素全部放入Stack中,你可能想到的实现方式如下: 1 2 3 4 public void pushAll(Iterable<E> src){ for (E e : src) push(e) } 假设有个Stack<Number>,想要灵活的处理Integer,Long等Number的子类型的集合 1 2 3 Stack<Number> numberStack = new Stack<Number>(); Iterable<Integer> integers = ....; numberStack.pushAll(integers); 此时代码编译无法通过,因为对于类型Number和Integer来说

Java总结篇系列:Java泛型

瘦欲@ 提交于 2019-12-02 15:39:31
转载: https://www.cnblogs.com/jesse123/p/11733031.html MapReduce计算框架 既然MR是一种计算框架,那么也存在其他的计算框架。 From: [Distributed ML] Yi WANG's talk Message Passing(消息传递)范式的一个框架叫做MPI,其实现叫作: MPICH2 MapReduce范式的框架也叫MapReduce,其实现叫作: Apache Hadoop BSP范式,其实现叫作: Google Pregel (类似Spark) 一、逻辑流程 Mapping与Shuffling之间可以插入”Combine“过程,但不一定都适合,比如”求平均值“。 Ref: Java总结篇系列:Java泛型 Ref: Word Count MapReduce Program in Hadoop import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache

集合、泛型、Map

白昼怎懂夜的黑 提交于 2019-12-02 15:32:38
集合与数组 集合与数组的区别? 1.集合的长度是可变的,而数组一旦确定长度将无法改变 2.集合只能存储引用类型,而数组可以存储引用类型,也可以存储基本类型 3.集合内的元素可以是不同类型的元素,但是数组只能是同类元素 Collection集合的的功能 常用的方法有: add()添加一个元素 addAll(Collection x)添加一个元素(该元素是一个集合) clear()移除所有元素 remove()移除一个指定元素 contains()判断该集合包含指定元素 containsAll( Collection x) 判断该集合是否包含指定集合 还可以通过例如Iterator< E> iterator()等进行获取该类型元素的集合 size()用来判断集合的长度 isEmpty() 判断集合是否为空 retainAll(Collection c) 可以获取两个集合的公有元素 Object[] toArray() 可以将集合转换成数组 ,然后可用通过遍历该数组从而遍历该集合 也可以使用迭代器迭代 List集合 其可以使元素有序存储,并给每一个元素一个索引。期内的元素可以重复出现 常用的方法有: add(int x ,X x)在指定索引添加指定的元素 remove()删除指定索引的元素 get() 返回指定索引的元素 set( )将指定索引出的元素 替换成另一个元素 List集合

JAVA泛型

蹲街弑〆低调 提交于 2019-12-02 14:52:41
泛型解释: 泛型的本质是参数化类型,通常用于输入参数、存储类型不确定的场景。相比于直接使用 Object 的好处是:编译期强类型检查、无需进行显式类型转换。 泛型概述: Java 泛型(generics)是 JDK 5 中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用是在 JDK 5 中的新集合类框架中。对于泛型概念的引入,开发社区的观点是褒贬不一。从好的方面来说,泛型的引入可以解决之前的集合类框架在使用过程中通常会出现的运行时刻类型错误,因为编译器可以在编译时刻就发现很多明显的错误。而从不好的地方来说,为了保证与旧有版本的兼容性,Java 泛型的实现上存在着一些不够优雅的地方。当然这也是任何有历史的编程语言所需要承担的历史包袱。后续的版本更新会为早期的设计缺陷所累。 开发人员在使用泛型的时候,很容易根据自己的直觉而犯一些错误。比如 一个方法如果接收 List 作为形式参数,那么如果尝试将一个 List 的对象作为实际参数传进去,却发现无法通过编译。虽然从直觉上来说,Object 是 String 的父类,这种类型转换应该是合理的。但是实际上这会产生隐含的类型转换问题,因此编译器直接就禁止这样的行为 。本文试图对 Java 泛型做一个概括性的说明。 类型擦除: Java

C# 与 Java 的一些差异

荒凉一梦 提交于 2019-12-02 14:35:43
如果你是 Java 开发人员,则可以在 Xamarin 平台上充分利用你的技能和现有代码,同时获得 C# 的代码重用优势。你会发现 C# 语法与 Java 语法非常相似,这两种语言提供非常类似的功能。此外,你会发现 C# 的特有功能,这些功能将帮助你轻松进行开发工作。 概述 本文介绍面向 Java 开发人员的 C# 编程,主要侧重于在开发 Xamarin.Android 应用程序时会遇到的 C# 语言功能。 此外,本文说明了这些功能与其 Java 对应项的区别所在,并介绍了在 Java 中不可用的重要 C# 功能(与 Xamarin.Android 相关)。 包含指向附加参考资料的链接,因此你可以将本文用作一个“起点”以进一步研究 C# 和 .NET。 如果你熟悉 Java,那么对于 C# 语法的使用便可以轻松上手。 C# 语法与 Java 语法非常相似 – C# 是“大括号”语言,如 Java、C 和 C++。 在许多方面,C# 语法读起来像是 Java 语法的超集,但是有一些重命名和新增的关键字。 可以在 C# 中找到 Java 的许多主要特征: 面向对象的基于类的编程 强类型化 支持接口 泛型 垃圾回收 运行时编译 Java 和 C# 都被编译为中间语言,在托管执行环境中运行。 C# 和 Java 都是静态类型,这两种语言将字符串视为不可变类型。 这两种语言使用单根类层次结构

Think in Java第四版 读书笔记9第15章 泛型

ⅰ亾dé卋堺 提交于 2019-12-02 14:35:41
Think in Java第四版 读书笔记9第15章 泛型 泛型:适用于很多很多的类型 与其他语言相比 Java的泛型可能有许多局限 但是它还是有很多优点的。 本章介绍java泛型的局限和优势以及java泛型如何发展成现在这个样子的。 15.1 Java的泛型与C++比较 Java的语言设计灵感来自C++,虽然我们学习Java时不需要参考C++,但是有时与C++进行比较可以加深理解 泛型就是一个例子 之所以将Java的泛型与C++进行比较原因有二 1.比较后会理解泛型的基础,同时你会了解Java泛型的局限性以及为什么会有这些局限性。(理解某个技术不能做什么 才能更好地做到所能做到的,不必浪费时间在死胡同乱转–Think in JAVA作者讲的很精辟!) 2.人们对C++模板有一种误解,这种误解可能导致我们在理解泛型的意图产生偏差。 15.2 简单泛型-指定容器存储类型 泛型最常见的使用是在容器类上,让我们从最简单的开始吧 例子:存放单个指定类型对象的容器 class Automobile {} public class Holder1 { private Automobile a; public Holder1(Automobile a) { this.a = a; } Automobile get() { return a; } } ///:~ 例子很简单

C#学习笔记【六】——泛型

老子叫甜甜 提交于 2019-12-02 12:21:48
6.1泛型类 6.1.1泛型类的定义 定义一个泛型类就是指的是,定义一个类,这个类中某些字段的类型是不确定的,这些类型可以在类构造的时候确定下来。 namespace c_sharp_001 { class ClassA<T> { private T a; private T b; public ClassA(T a, T b) { this.a = a; this.b = b; } public string GetSum() { return a + " " + b; } } } 6.1.2泛型方法 定义泛型方法就是定义一个方法,这个方法的参数的类型可以是不确定的,当调用这个方法的时候再去确定方法的参数的类型。 namespace c_sharp_001 { class Program { public static string GetSum<T>(T a,T b) { return a + " " + b; } public static string GetD<T1,T2>(T1 a, T2 b) { return a + " " + b; } static void Main(string[] args) { Console.WriteLine(GetSum(12, 14)); Console.WriteLine(GetD<int,double>(12, 14.1));

java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

吃可爱长大的小学妹 提交于 2019-12-02 08:53:47
1、 为什么要使用泛型 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢? 顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用 / 调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。 在 javaSE5.0 之前, java 泛型程序设计是使用继承实现的。 ArrayList 类只维护一个 Object 引用的数组 public class ArrayList// 之前的 { public Object get(int i){......} public void add(Object o){......} ...... private Object[] elementData; } 但是这样有两个问题: 1. 当获取一个值时必须进行强制类型转换 2. 没有错误检查,可以向数组列表中添加任何类的对象 但是这样很容易出现问题,比如 : public static void main(String[] args) {