首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )

文章目录 一、泛型简介 二、泛型类 三、泛型方法 四、静态方法的泛型 五、泛型类与泛型方法完整示例 一、泛型简介 ---- 泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上...; 其中的 参数 , 返回值 类型是 T , 但 这个 T 是作为一个正常的类型使用的 , 并不是声明在 方法 中的泛型 ; 如果 类 , 接口 , 方法 是 泛型类 , 泛型接口 , 泛型方法 , 则该...; 泛型方法 与 泛型类 中的泛型 : 泛型不同 : 泛型方法指定的泛型 T 与 类中的泛型 T 没有任何关系 , 这两个 T 可以是不同的类型 ; 泛型相同 : 泛型方法中定义的 泛型 T...不能是类的泛型 ; 错误用法 : 正确用法 : 五、泛型类与泛型方法完整示例 ---- /** * 泛型类 * 该 T 类型作为参数使用 * T 是参数化类型 , 可以由外部传入...不能是类的泛型 * * @param arg * @return */ public static T getData3(T arg){

15.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 )

    文章目录 一、Dart 泛型类与泛型方法 二、Dart 泛型中的特定类型约束 三、Dart 自带泛型 四、完整代码示例 五、 相关资源 一、Dart 泛型类与泛型方法 ---- 泛型作用 : 为 类 ,...接口 , 方法 提供复用性 , 支持类型不确定的数据类型 ; 泛型类 : 提高代码复用程度 ; 泛型方法 : 参数或返回值有泛型类型约束 , 参数或返回值类型必须符合对应的泛型类型 , 泛型使用时会进行类型检查约束..., 如果设置错误的类型 , 编译时报错 ; 泛型类示例 : /// 泛型作用 : 为 类 , 接口 , 方法 提供复用性 , 支持类型不确定的数据类型 /// /// 泛型类 : 提高代码复用程度 /...创建泛型类对象 , 泛型类型设置为 String 类型 Cache cache = Cache(); // 调用泛型方法时 , 传入的参数必须符合对应的泛型类型...} 此处的 MyHomePage 就是 泛型类型 , 是 StatefulWidget 类的子类 , 符合 泛型要求 ; 四、完整代码示例 ---- 泛型类 , 泛型方法 , 泛型测试相关代码 : import

    5.4K00

    泛型类、泛型方法、类型通配符的使用

    泛型类、泛型方法、类型通配符的使用 一.泛型类        泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分...和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。...一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。 泛型方法体的声明和其他方法一样。...注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等) 1 public class GenericMethodTest 2 { 3 // 泛型方法 printArray...下面的例子演示了"extends"如何使用在一般意义上的意思"extends"(类)或者"implements"(接口)。该例子中的泛型方法返回三个可比较对象的最大值。

    3.8K40

    泛型擦除是什么意思_泛型类和泛型方法的区别

    大家好,又见面了,我是你们的朋友全栈君 在严格的泛型代码里,带泛型声明的类总应该带着类型参数。但为了与老的Java代码保持一致,也允许在使用带泛型声明的类时不指定实际的类型。...如果没有为这个泛型类指定实际的类型,此时被称作raw type(原始类型),默认是声明该泛型形参时指定的第一个上限类型。...当把一个具有泛型信息的对象赋给另一个没有泛型信息的变量时,所有在尖括号之间的类型信息都将被扔掉。...比如一个 List 类型被转换为List,则该List对集合元素的类型检查变成了泛型参数的上限(即Object)。...对泛型而言,可以直接把一个List对象赋给一个 List 对象,编译器仅仅提示“未经检查的转换”。

    1.3K30

    Java泛型详解:和Class的使用。泛型类,泛型方法的详细使用实例

    与泛型类的定义一样,也是在接口名后加尖括号; (1)、使用方法一:非泛型类 但是在使用的时候,就出现问题了,我们先看看下面这个使用方法:      [java]     view plain...:泛型类 在方法一中,我们在类中直接把Info接口给填充好了,但我们的类,是可以构造成泛型类的,那我们利用泛型类来构造填充泛型接口会是怎样呢?     ...1,一个是泛型表示某一个类型的参数。为的传递某一类的参数对象  2,另一个则是传递的不是参数,而是代表Class,某一个类。 恰巧我都使用过,就正好记录一下实际使用实例。     ...,主要是要使用参数对象,而不是上面的那个使用的参数的类Class   我这方法提出来,主要是因为,直接使用list类的addAll()方法,如果添加的是null,那么就会抛异常。...但是总不能我在所有使用的地方,都判断一下我要添加的参数是不是null,然后再调用list的addAll()方法吧。那样的话,这样的判断代码会啰嗦的海了去了。所以,就这么提出来了。

    3.3K50

    Java泛型入门介绍--自定义泛型类方法通配符的问题

    1.基于问题引入泛型 下面的这个只展示了我们的main方法里面的内容,实际上这个java文件里面还进行了这个cat,dog类的定义,我们想要对于这个狗的名字进行打印,然后加上这个狗的年龄; 我们的一贯做法就是...传入数据的类型需要是常用类,不可以是基本的数据类型; 传递进去的这个不仅可以是我们的这个泛型类,也可以是这个类的子类; 泛型的写法:编译器可以进行这个类型的推断 之前我们没有学习这个泛型的时候,这个尖括号里面的默认的类型就是...泛型里面其实可以有多个类型,不只是只有一个; 静态的方法和静态的属性不可以使用泛型语法; 泛型的数组不可以进行初始化,就是不可以进行new操作开辟空间; 7.自定义泛型方法的案例 下面的这个练习主要就是想要说明一个问题...: 我们下面的这个Apple里面的这个fly方法用的是自己的泛型E,虽然这个在我们的类这个定义的时候没有出现,但是这个是可以使用的,符合语法的要求; eat和run两个自定义的方法,都是没有自己的泛型,...只是这个参数里面涉及到了泛型,这个和fly方法有本质的区别,在这个访问权限修饰符后面加上这个泛型之后,我们的自定义方法才可以使用自己的这个泛型,但是eat调用的这个在我们的类定义的三个里面没有出现,就会报错

    3900

    详解Java构造方法为什么不能覆盖,我的钻牛角尖病又犯了....

    三 但是,看了输出,我就纳闷为什么,为什么第三行不是BigEgg2.Yolk(),不能覆盖吗?...注意此处,同名类可以继承。 那么,他们构造方法为什么不能覆盖,都是Public Yolk(){}。 当然,网上都说子类继承父类除构造方法以外的所有方法,但这是结果,我要知道为什么!!...五 先说几个错误的观点 1. 有说构造方法的方法名与类名必须一样,父子类不能同名,故不能继,所以不能覆盖构造方法。 这个不用多说,这个例子,就是大神写出来打这样说的人的脸的。 2....(这就是为什么创建子类时先创建完父类的原因了) 那么很明显了,要是同名类之间可以覆盖了,子类创建时就是创建了两个自己而没有父类。...Java设计的时候,他们绝对想到有些人会像强迫症那样折腾个同名类继承,然后实现构造覆盖的场景吧.... 总结 构造方法是唯一的,不能又造爸爸又造儿子

    2.1K20

    移花接木:当泛型方法遇上抽象类----我的“内存数据库”诞生记

    SaveEntity 方法无法编译通过,VS给出的错误提示 “必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法”SaveEntity>(T[] entitys)中的参数“T”, 于是改一下保存数据的方法...但序列化实体类的方法无法编译通过: byte[] buffer = PdfNetSerialize.BinarySerialize(entitys); BinarySerialize 方法也要求泛型类类型...不能是抽象类或接口类型!...这样就解决了泛型类不能使用抽象类类型的问题,但这里怎么可能拿得到呢?...虽然我们在运行时,我们能够确切的看到 item 变量对应的对象的具体类型,但我们的代码在这里却没法给泛型方法的类型一个交代,这可怎么办呢?

    1.4K50

    我为什么要创建一个不能被实例化的类

    一个不能被初始化的类,有什么用? 这就要引入我们今天讨论的一种设计模式——混入(Mixins)。 Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。...每个 Mixins 类只有一个或者少数几个方法。不同的 Mixin 的方法互不重叠。...但是 在写 Mixins 类的时候,我们不会写__init__方法,也不会写类属性。并且 Mixin 类中的方法看起来更像是工具方法。 我们可以写很多个 Mixin 类,然后用一个子类去继承他们。...由于这些 Mixin 类提供的各个工具方法互不相关,所以不存在菱形继承的问题。但是在子类中却可以分别调用这些工具方法,从而扩展子类的功能。...接口: 只能包含抽象方法。 混入: 不能包含状态(实例变量)。 包含一个或多个非抽象方法。

    3.4K10

    听了他讲的泛型,我就明白为什么他的工资比我多30万了!

    1 类 型 擦 除 Java是怎么实现泛型的?不错,类型擦除。...运行在JVM中也是一样的,那你可能会有疑问,既然将类型擦除了,那为什么我声明的泛型为String类型时,不能往里add一个整型的数据呢?...2、不能用来方法的重载 为什么呢?举个例子: ? 如上图所示,在不同的泛型作为参数时,编译器编译时进行类型擦除,那参数不就一样了吗?那还谈什么重载呢!...上图中展示了5种使用方式,除了第四种Java能正常使用,其他Java都不能使用,而C#完全没问题。 4、静态方法无法引用类的泛型类型 ?...Java中的泛型是类实例化的时候才能确定泛型的准确类型,而静态方法是不需要类实例化就能调用的,显然不能使用。 5、类型强转的开销 ?

    59221

    HashMap中put()方法实现原理

    突然想解剖HashMap实现原理,Map链表的作者源码如何实现?也可以丰富一下自己的编程思想,也想让读者看见如何观看别人源码的思路和方法。所以心血来潮的我,就来解析HashMap底层原理!...{ ..... } 复制代码 可以看出类继承了AbstractMap抽象泛型类,实现了Map泛型接口和Cloneable、Serializable接口 AbstractMap抽象泛型类 public...如果抽象类继承了泛型接口,要么改写抽象类为抽象泛型类,要么删除泛型接口中的泛型定义 接着看Map泛型接口 import java.util.Collection; import java.util.Set...按照惯例,实现此接口的类应使用公共方法覆盖Object.clone (受保护)。 有关覆盖此方法的详细信息,请参阅Object.clone() 。 注意,此接口不包含clone方法。...因此,只能通过实现该接口的事实来克隆对象是不可能的。 即使克隆方法被反射地调用,也不能保证它成功。

    66630

    kotlin入门之泛型

    表示List的泛型类型是一个未知类型 super限制了这个未知类型的下界,也就是这个泛型类型必须满足这个super 限制条件 super我们在类的方法里面经常用到,这里的范围不仅包括Button...extends 来使泛型支持协变,但是「只能读取不能修改」, 这里的修改仅指对泛型集合添加元素,如果是 remove(int index)以及 clear当然是可以的。 可以使用泛型通配符?...super 来使泛型支持逆变,但是「只能修改不能读取」, 这里说的不能读取是指不能按照泛型类型读取,你如果按照 Object读出来再强转当然也是可以的。...,不能写我; in表示:我只用来输入,不用输出,你只能写我,不能读我。...所以该方法的参数是传入不了的 *规则 如果使用在out修饰的类的泛型中使用,那么就会取其上限 如果使用在in修饰的类的泛型中使用,那么就会取其下限Nothing *使用范围 *不能直接或者间接应用在属性或者函数上

    1.2K20

    C#基础与常用数据结构学习笔记

    1.接口 interface   接口相当于没有方法实现的抽象类,接口方法不要加各种访问级别:例如public,private等。     ...Add、Clear、Contains、Count、Remove、RemoveAt、ToArray(转换,再没关系)、索引器 C#中所有的数组类型int[]、string[]等都是继承自Array类。     ...所有的List所有的方法也都是泛型的,范型的集合提供的方法更多,Max、Min、Sort等。       Dictionary:Key-value Pair 键值对。...这里老大谈到了一道常考题:泛型的非泛型类型是什么?...查找的时候首先计算key的地址,就可以找到数据了。根据key找房间号,而不是逐个房间找。 5.其他集合类   HashSet:不能盛放重复的数据,重复的数据只保留一份。

    48030

    重学Java之泛型的基本使用

    后面我想到了泛型擦除,但其实这跟泛型擦除倒是没关系,问题出在自动装箱和拆箱上,Java的编译器将原始类型转为包装类,包装类转为基本类型。...我一开始用的是JDK 8,在使用这个版本的时候,泛型已经进入Java十年了,泛型对于我来说是很理所当然的,就像鱼习惯了水一样。那Java为什么要引入泛型呢?...这里来讲下我的理解,一般方法需要的参数,调用方没有提供,编译不通过。为什么泛型没有引入此设计呢,不传递类型参数,那不通过编译不是更好嘛。那让我们回忆一下,泛型是从JDK的哪个版本开始引入的?...因此,MyNode.setData(T)方法并没有覆盖Node.setData(Object)方法, 为了维护泛型的多态,Java编译器产生了桥接方法,以便让子类型也能继续工作。...为了保持向后兼容,Java选择了泛型擦除来实现泛型,这一实现机制在早期的我来看,这种实现并不好,我认为这种实现影响了Java的性能,我甚至认为这不能称之为真正的泛型, 比不上C#,但是在重学泛型的过程中

    37610

    Java集合框架详述之(Collection,List,Set)

    是 中 国 人 [我, 是, 中, 国, 人] Process finished with exit code 0 注:Collection在使用泛型之前,可存放Object的所有子类,在使用泛型之后...Vector底层是线程安全的,但是效率低 泛型机制(jdk1.5之后新特性) 只在编译时起作用,给编译器参考 泛型优缺点: 优点: 1.集合中存储元素类型统一 2.集合中去除掉元素是泛型指定的类型...使用泛型之后 测试类: public class GenericText { public static void main(String[] args) { //使用泛型List...Set集合中的元素还不能重复。 HashSet类 HashSet 中的数据是无序的不可重复的。...特别是向 HashSet 或 HashMap 中加入数据时必须同时覆盖 equals 和 hashCode 方法,应该养成一种习惯覆盖 equals 的同时最好同时覆盖 hashCode Java语法要求

    60420

    那些年我们在Java泛型上躺过的枪---万恶的泛型擦除【享学Java】

    请注意参数化类型和方法参数类型的区别~ 泛型类 对比下面两个类,一个是普通类,一个是泛型类: class Generics { Object k; Object v; public...T> T genericStaticMethod(T t){ return t; } 这里需要稍微注意一下: public class Main { // 静态方法不能直接使用类的泛型参数...泛型方法的声明和泛型类的声明略有不同,它是在返回类型之前用尖括号列出类型参数列表(也可以有多个泛型类型),而函数传入的形参类型可以利用泛型来表示。...比如你传入的泛型参数为T,而在方法内部你无法使用T的任何方法(Object的方法除外),毕竟编译期它的类型还不确定 在能够使用泛型方法的时候,尽量避免使整个类泛化。...通过此例可以总结出如下两点: 泛型的类型参数只能是类类型,不能是简单类型 不能对不确切的泛型类型使用instanceof操作(如上例子泛型类型若没指定上限,都是Object的子类而已) 附:关于Arrays.asList

    99030

    转向Kotlin——泛型

    泛型基础 在了解Kotlin的泛型之前,先来看看Java中的泛型: 举个栗子:在JDK中,有一类列表对象,这些对象对应的类都实现了List接口。...尽管这样做是可以保存任意类型的对象,但每个列表元素就失去了原来对象的特性,因为在Java中任何类都是Object的子类,这样做的弊端就是原有对象类型的属性和方法都不能再使用了。...如果你使用一个生产者对象,将无法对这个对象调用add或set等方法,但这并不代表这个对象的值是不变的。例如,你完全可以调用clear方法来删除List中的所有元素,因为clear方法不需要任何参数。...Int, t: T) { } } 此类中的T既是get方法的返回值,又是set方法的参数,也就是说Array类既是T的生产者,也是T的消费者,这样的类就无法进行子类化。...泛型函数 不仅类可以有泛型参数,函数一样可以有泛型参数。泛型参数放在函数名称之前。

    93520

    Effecvtive Java Note

    好的api文档应该描述一个给定的方法做了什么工作,而不是描述它是如何工作的。 构造器决不能调用可覆盖的方法,无论是直接调用还是间接调用,如果违反了这个原则,很可能导致程序失败。...超类的构造器在子类的构造器之前,所以,子类中覆盖方法将会在子类的构造器之前就先调用。...泛型 在没有泛型之前,从集合读取到的每一个对象都必须进行转换,如果有人不小心插入了类型错误的对象,在运行的转换处理就会出错。有了泛型之后,可以告诉编译器每个集合中接受哪些对象类型。...25.列表优先于数组 数组提供了运行时的类型安全,但是没有编译时的类型安全,反之,对于泛型也一样,一般来说,数组和泛型不能很好的混合使用。...在设计新类型的时候,要确保他们不需要这种转换就可以使用。这通常意味着这把类做成泛型的。 27.优先考虑泛型方法 更加安全、不用转换就可以使用。 28.利用有限制通配符来提升api的灵活性 ?

    73850
    领券