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

绑定子类的泛型基类,反模式?

基于这个基类的代码重用,使得子类的代码非常简单。这里和普通继承、普通泛型的不同点在于父类在运行时绑定了具体子类的类型。 设计原理     为什么要这样设计?基类为什么不直接使用非泛型的基类呢?...再举一个例子:由于泛型基类运行时绑定了不同的子类,使得它本身的静态字段绑定到最终的子类中的。...上面只是举了些最简单的例子,实际上,由于使用了绑定具体子类的泛型基类,还会有很多地方的设计变得更简单了,在此不再一一列举。 带来的问题     使用这种模式,缺点是显而易见的:     1....要解决这个问题,我们需要把需要进行再继承的类也提取为一个泛型基类和一个继承此基类的空的子类。...* 要不就是所有的类都直接写成一个泛型类+一个空子类的方法。(这个设计丑陋吗?)

1K50

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

泛型类、泛型方法、类型通配符的使用 一.泛型类        泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分...和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。...       你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。...下面的例子演示了"extends"如何使用在一般意义上的意思"extends"(类)或者"implements"(接口)。该例子中的泛型方法返回三个可比较对象的最大值。...List类型的,所以name,age,number都可以作为这个方法的实参,这就是通配符的作用 2、类型通配符上限通过形如List来定义,如此定义就是通配符泛型值接受Number及其下层子类类型。

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

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

    ,普通类构造函数是这样的:Point p = new Point() ;  而泛型类的构造则需要在类名后添加上,即一对尖括号,中间写上要传入的类型。...,我们构造了一个泛型类InfoImpl,然后把泛型变量T传给了Info,这说明接口和泛型类使用的都是同一个泛型变量。...  上面我们讲解了类和接口的泛型使用,下面我们再说说,怎么单独在一个函数里使用泛型。...,与以往方法的唯一不同点就是在返回值前加上来表示泛型变量。...唯一不同的是,要在函数定义的中在返回值前加上标识泛型; 5、其它用法:Class类传递及泛型数组  (1)、使用Class传递泛型类Class对象 有时,我们会遇到一个情况,比如,我们在使用

    3.3K50

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

    的性能 ; 二、泛型类 ---- 泛型类 : 在 类名后面 使用 声明泛型 , 则在该类中 , 可以使用该泛型类型 T 类型 ; 特别注意 , 该类中的 如下 2 个方法 不是 泛型方法...; 其中的 参数 , 返回值 类型是 T , 但 这个 T 是作为一个正常的类型使用的 , 并不是声明在 方法 中的泛型 ; 如果 类 , 接口 , 方法 是 泛型类 , 泛型接口 , 泛型方法 , 则该..., 多个泛型之间 , 使用逗号隔开 ; 泛型方法 与 泛型类 中的泛型 : 泛型不同 : 泛型方法指定的泛型 T 与 类中的泛型 T 没有任何关系 , 这两个 T 可以是不同的类型 ; 泛型相同...---- 静态方法泛型 : 如果静态方法中 使用了 类中的泛型 T , 作为参数 或 返回值 , 这种使用时错误的 ; 如果必须在 静态方法 中使用泛型 T , 则该泛型 T 必须是静态方法的泛型 ,...类中的泛型 * 这种使用时错误的 * * 如果必须在 静态方法 中使用泛型 T * 则该泛型 T 必须是静态方法的泛型 *

    15.4K30

    当类的泛型相关时,如何在两个泛型类之间创建类似子类型的关系呢

    那么问题来了,当类的泛型相关时,如何在两个泛型类之间创建类似子类型的关系呢?例如如何让Box 和Box变得与Box有关呢?...为了搞懂这个问题,我们先来了解一下同一类型的对象是如何实现子类型化的吧。...小结:可以通过继承泛型类或者实现接口来对其进行子类型化。 搞懂了子类型化的问题,我们回到“如何在两个泛型类之间创建类似子类型的关系“的问题。...泛型类或者接口并不会仅仅因为它们的类型之间有关系而变得相关,如果要达到相关,我们可以使用通配符来创建泛型类或接口之间的关系。...> 为了在这些类之间创建关系,以便代码可以通过Box访问Box的方法,可以使用上限通配符: Box<?

    2.9K20

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

    接口 , 方法 提供复用性 , 支持类型不确定的数据类型 ; 泛型类 : 提高代码复用程度 ; 泛型方法 : 参数或返回值有泛型类型约束 , 参数或返回值类型必须符合对应的泛型类型 , 泛型使用时会进行类型检查约束..., 使用 约束该泛型必须是某个类的子类 ; 泛型类示例代码 : /// 泛型中的特定类型约束 /// 将泛型约束为某个类型的子类 class Member<T extends...} 此处的 MyHomePage 就是 泛型类型 , 是 StatefulWidget 类的子类 , 符合 泛型要求 ; 四、完整代码示例 ---- 泛型类 , 泛型方法 , 泛型测试相关代码 : import...泛型类测试 /// 类泛型要求是 T extends Person , 泛型类型必须是 Person 的子类 /// Student 是 Person 的子类 Member类构造方法之外 , 还可以在子类构造方法体之前初始化示例变量 /// 不同的初始化实例变量之间使用逗号隔开 /// /// 父类构造方法

    5.4K00

    泛型类的正确用法

    在准备下次直播Java基础的内容中,偶然看到Java泛型这个知识点,突然有了点想法,之前一直纠结的一个问题有了解答的思路。...问题:我在多线程任务基类中定义了一个泛型T的对象t,但是一直没有找到一个特别合适的发光点,感觉跟重新写一个内部类差别不大,偶尔在匿名类中使用,非但没有更加灵活,反而衍生出一些其他多线程锁的问题。...,额外的属性对象就可以用这个泛型T代替。...突觉自己以前走了很多弯路,对泛型的掌握和应用太浅薄,说干就干了,马上对现有的性能测试框架中的abstract类和实现类都改一遍。...,被继承的父类中T可以声明成为HttpRequestBase类,然后在代码中关于父类的操作,如super(request, times, mark);中是可以成立的,然后在本类名后面的泛型不能声明对象,

    86940

    C#的泛型类

    在C#编程中,泛型类是一种支持泛型编程的构造,它允许开发者编写与类型无关的代码。泛型类在编译时不绑定到任何特定的类型,而是在实例化时绑定。...泛型类的基本概念1.1 什么是泛型类泛型类是一种支持泛型编程的类,它使用类型参数来定义类。这些类型参数在类被实例化时被指定。1.2 泛型类的特点类型安全:泛型类在编译时检查类型安全。...代码重用:泛型类可以用于不同的数据类型,从而实现代码重用。性能:泛型类避免了装箱和拆箱操作,提高了性能。2. 实现泛型类2.1 声明泛型类泛型类的声明包括指定类型参数。...泛型类的最佳实践4.1 使用泛型类来提高代码重用性泛型类可以用于不同的数据类型,从而实现代码重用。4.2 利用约束来保证类型参数的兼容性约束确保类型参数满足特定的要求。...4.3 避免使用泛型类进行复杂的继承结构复杂的继承结构会使代码难以理解和维护。4.4 使用泛型类来实现算法泛型类是实现通用算法的理想选择,如排序、搜索等。

    2.3K00

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

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

    1.3K30

    使用通配符和泛型:完成父子类关系的List对象的类型匹配

    泛型和通配符 使用泛型和通配符都可以让一个方法所表示的算法逻辑适应多种类型。...Java中具备继承关系的类A、B(A extends B)它们的集合List和List之间是没有继承关系的, 可以使用泛型或通配符来让一个方法支持同时接受List和List。...代码场景 这里分别定义类Animal、Dog和Cat,很显然,Dog和Cat是Animal的子类。...可以通过通配符或者泛型方法实现。 通配符实现 使用List这样的形参,就可以接收集合项为Animal子类的任意List。...泛型参数也可以是多个的,而且之间存在关系。 小结 以上通过一个不太实际的案例说明了使用泛型和通配符来解决List泛型集合之间的“匹配”问题。这也是它们的主要用途之一。 (本文使用Atom编写)

    2.8K00

    使用通配符和泛型:完成父子类关系的List对象的类型匹配

    泛型和通配符 使用泛型和通配符都可以让一个方法所表示的算法逻辑适应多种类型。...Java中具备继承关系的类A、B(A extends B)它们的集合List和List之间是没有继承关系的, 可以使用泛型或通配符来让一个方法支持同时接受List和List。...代码场景 这里分别定义类Animal、Dog和Cat,很显然,Dog和Cat是Animal的子类。...可以通过通配符或者泛型方法实现。 通配符实现 使用List这样的形参,就可以接收集合项为Animal子类的任意List。...泛型参数也可以是多个的,而且之间存在关系。 小结 以上通过一个不太实际的案例说明了使用泛型和通配符来解决List泛型集合之间的“匹配”问题。这也是它们的主要用途之一。

    1.6K70

    对java中的泛型的理解

    2.泛型的使用 对于泛型的使用,主要有三种方式,分别是泛型类、泛型接口和泛型方法。 2.1 泛型类 泛型类用于类的定义中,被称为泛型类,通过泛型可以完成对一组类的操作。使其开放相同的接口。...对于泛型方法,其首先在类的申明中并没有对泛型进行相关的申明,但是在使用方法时候又希望对泛型进行使用。那么此时,就需要在方法的返回值之前,用尖括号来对泛型进行申明,之后就可以对泛型进行使用了。...,首先用对泛型进行了申明,之后就是对泛型的正常使用。...3.泛型的本质 当我们开始准备进一步对java中的泛型进行深入使用的时候,我们会发现,java中的泛型与C++等语言还不太一样。...这样有两个好处: 如果传入的类型不是 E 或者 E 的子类,编译不成功 泛型中可以使用 E 的方法,要不然还得强转成 E 才能使用 4.6.3 下界通配符 < ?

    69220

    泛型的高级使用

    泛型是什么 记得以前面试的时候经常被问泛型是什么,为什么要使用泛型? 泛型:可以说是类型参数化。...也就是说操作的数据类型,被指定为一个参数,这种参数可以用在类、接口、方法上,分别可以叫做泛型类、泛型接口、泛型方法。...,我们在编译的时候就发现错误,不用等运行的时候,这也是使用泛型的一个好处。.../** * 传入泛型实参时: * 定义一个生产器实现这个接口,虽然我们只创建了一个泛型接口TestInter * 在实现类实现泛型接口时,如已将泛型类型传入实参类型,则所有使用泛型的地方都要替换成传入的实参类型...由此可以看出:同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。

    43510

    Day14 自己定义泛型类的使用

    实现方式:在定义集合时明白了该集合中能够存储元素的类型 泛型的使用格式: 注意:泛型中仅仅能使用引用类型 package org.test; import java.util.ArrayList...import java.util.List; public class TestGeneric { public static void main(String[] args) { //自己定义泛型类的使用...//1.实例化泛型类的对象时指明泛型的类型,这儿不能一般类型,仅仅能是引用类型 //全部使用了泛型类型的地方。...都要变成泛型类的类型 //2.假设不指明类型,默认是Object类型 order o = new order(); //order oo = new...不能缺少 public E getE(E e) { return e; } } //子类还是不确定类型T ,实例化子类的对象时候要指明泛型的引用类型 //继承泛型类或泛型接口时

    47020
    领券