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

通过获得子类Class类型 以及Type体系

1、背景介绍 实现SSH框架,DAO层向数据库持久化的过程,因为大部分保存对象的方法都会调用到sava();所有索性就把save delete update select 方法进行封装到,这时候就遇到了个问题...,子类调用这些方法的时候,需要根据子类类型获知子类Class类型;这个时候可以通过传入,根据类型来获取子类的Class类型;  2、实现代码范例 :public abstract class...> c = this.getClass(); //子类创建 会创建 子类调用时 此处的this是子类 Type t = c.getGenericSuperclass(); //获得带有...this.child= (Class) p[0]; } } 子类调用方法时,如果方法需要知道具体子类的Class类型 则可以直接使用...Child来使用;   此处的原理就是子类继承的时候 带有 然后子类创建的时候,会调用的构造函数,构造函数存在this指的的是子类,然后通过获得,再获得 ;通过找到子类类型

4.6K20

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

对话的截图如下: 看了阿Q的解释,你是否也和“马小跳”一样存在疑问呢?请往看 我们都知道java,只要是类型兼容,就可以将一种类型的对象分配给另一种类型的对象。...那么问题来了,当相关时,如何在两个之间创建类似子类型的关系呢?例如如何让Box 和Box变得与Box有关呢?...小结:可以通过继承或者实现接口来对其进行子类型化。 搞懂了子类型化的问题,我们回到“如何在两个之间创建类似子类型的关系“的问题。...或者接口并不会仅仅因为它们的类型之间有关系而变得相关,如果要达到相关,我们可以使用通配符来创建或接口之间的关系。...extends Number> 因为Integer是Number的子类型,numberBox的是Number对象子类,所以intBox和numberBox之间存在关系。

2.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

Python 子类调用方法详解(单继承、多层继承、多重继承)

测试环境: win7 64位 Python版本:Python 3.3.5 代码实践: 1、子类通过“名”调用方法 class FatherA: def __init__(self)...__init__(self) # 子类调用方法名.方法名称(参数) if __name__ == '__main__': b = SubClassB() 运行结果: >>> ==...(SubClassB的由FatherA变为FatherD时),必须遍历整个定义,把子类中所有的名全部替换过来 2、子类通过“super”方法调用方法 场景1、单层继承 class...__init__() # 子类调用方法:super().方法名称(参数) if __name__ == '__main__': b = SubClassB() class FatherA...__init__() # 子类调用方法:super(type, obj).方法名称(参数) if __name__ == '__main__': b = SubClassB() 运行结果

2.9K30

【面试题精讲】的使用方式有哪几种?

的使用方式有以下几种: :定义一个时,可以名后面加上尖括号,并在其中指类型参数。这样,中就可以使用这个类型参数来声明属性、方法等。...MyGenericClass 是一个,T 是类型参数,可以的属性和方法中使用。...接口:与类似,可以接口名后面加上尖括号,并在其中指类型参数。然后实现该接口时,需要指定具体的类型。...方法普通或者非,可以定义一个方法,即在方法返回值前面加上尖括号,并在其中指类型参数。...printValue 是一个方法, 是类型参数,方法可以使用这个类型参数。

14750

的基本原理

在这里相当于声明了一个限定类型,该类的成员属性或者方法都可以直接拿来用。 方法 这里大家需要明确一点的是,方法并不一依赖其外部的或者接口,它可以独立存在,也可以依赖外围存在。...所以子类数组实例赋值数组实例,只不过意味着数组实例的引用指向堆中子类数组而已,并不会有所冲突,因此是 Java 允许这种操作的。 而是不允许这么做的,为什么呢?...那么,假如有某种需求,我们的方法既要支持子类作为形参传入,也要支持作为形参传入,又该怎么办呢?...>:通配任意一种类型 :必须是某个类型 通配符相当于一个集合,符合通配符描述的类型都被框进集合方法调用时传入的实参都必须是这个集合的一员,否则将不能通过编译。...具体原因是什么,我们也详细介绍了,大致意思就是,容器可以放任意类型的元素,而子类容器只能放某种特殊类型的元素,如果代表了某一个子类容器,那么容器就有可能放入非当前子类实例所允许的元素进入容器

54000

Java的学习和使用

ArrayList--get方法 ArrayList--get方法 查看源码发现,ArrayListget方法,已经显式进行了类型转换; 自定义一个get方法不进行类型转换的声明,看看结果如何...子类的对象使用这个方法时,将调用子类的定义,对它而言,的定义如同被“屏蔽”了。...接下来,让我们看一个例子,来具体的分析; Test 子类TestChild 由于擦除的存在,程序运行期间,TestJVM虚拟机实际的形态如下: 编译后Test 被擦除,变量替换为...既然不是重写,并且Test 和 TestChild又是子关系,那么set方法从定义上来看只有可能是重载的关系;子类继承方法TestChild形成重载:setT(Object t)、setT...当然,需要区分5.3章节的情况: 5.3 方法 方法 方法,自己定义的变量,与无关; 6. 通配符与上下界 我们实际工作,常见的通配符有3: 无限定通配符,形式:<?

1.5K40

Java——帮助你更好的读懂源码<dog>

就相当于集合的标签,我们使用集合的时候,就是使用 要知道的是jdk1.5以前我们只能把集合的元素设计为Object,之后引入了的概念来解决,我们把元素的类型设计成一个参数,...System.out.println(a); } } public static class Text01 extends Text{ } } 指定...,子类无需再指定,可以直接继承自中指定好的,那么既然有指定好的,那么我们来看一下没有指定好的是什么情况?...如果不明确指定,那么子类也会变成一个,这个E的类型可以创建子类对象的时候确定 这像不像ArrayList的源码呢?...方法 这里有一个比较容易混淆的概念,方法。 这是不是一个方法呢?不是!并不是带就是方法 方法的参数类型无关于当前,我们通过下面的代码来看一下!

24820

绑定子类,反模式?

这次总结一个个人认为的反模式:“绑定子类层基”,这个模式一些著名的框架也见到过,如果CSLA、BlogEngine。我自己原来的写的框架,也用到过。    ...基于这个基的代码重用,使得子类的代码非常简单。这里和普通继承、普通的不同点在于在运行时绑定了具体子类类型。 设计原理     为什么要这样设计?基为什么不直接使用非的基呢?...这是为了实现的通用方法,能够以强类型的方式直接访问最终的子类。...同样的功能,如果你要使用非的基,由于所有类型共享一个运行时基,你需要考虑为为每个具体的类型存储对应的值,例如,使用一个字典存储: public abstract class EntityBase...* 要不就是所有的都直接写成一个+一个空子类方法。(这个设计丑陋吗?)

97150

深入理解

引入的意义何在的提出是为了编写重用性更好的代码。 的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。   ...接口:实现实现接口时需要指明具体的参数类型,不然默认类型是 Object类型方法:如果所在的,则直接使用声明的参数,如果不是,则需自己声明参数类型通配符 : 类型参数中使用 extends 表示这个的参数必须是 E 或者 E 的子类,这样有两个好处: 如果传入的类型不是 E 或者 E 的子类,编辑不成功。...可以使用 E 的方法,要不然还得强转成 E 才能使用。 : 类型参数中使用 super 表示这个的参数必须是 E 或者 E 的。 小结: 无限制通配符<?...它们的目的都是为了使方法接口更为灵活,可以接受更为广泛的类型。 用于灵活写入或比较,使得对象可以写入类型的容器,使得类型的比较方法可以应用于子类对象。 < ?

43010

呢?

OO(面相对象)六大设计原则之一的LSP(里氏代换原则 Liskov Substitution Principle),里氏代换原则说,任何基可以出现的地方,子类可以出现。...,同理基本类型封装为Number子类,关于自动装箱和自动拆箱是javaJDK1.5的时候引入的新特性,我们这里不多讲,上面的代码可以正常编译,并且输出下面的内容,这里,数组里的基本类型装箱为封装放到了堆...,这些封装可以出现在Number定义的数组,说明子类可以替换了,即数组是满足协变的。...对于协变和逆变是否支持 不支持协变也不支持逆变,即不能把一个对象赋值给一个子类类型变量,相反也是同理。...:子类方法返回值的类型方法宽,此时为逆变方法

62510

【Java基础】JavaCore核心-技术

@TOC 1.什么是定义、接口和方法时,可以声明时通过一的格式指定其参数类型 使用时再指定具体的类型,从而使得、接口和方法可以被多种类型的数据所实例化或调用 这种可以在编译时进行参数类型检查的技术被称为...减少了源代码的强制类型转换,代码更加可读 案例 图片 3.的分类 可以用在、接口和方法,分别被称为接口、方法 字母通常类型参数都使用大写的单个字母 T:任意类型 type...,那子类类型要一致; 如果子类有多个,那需要包括类型 图片 (4)接口 规则和一样 如果实现,那接口和实现类型要一致;如果实现有多个,那需要包括接口的类型...>,List 主要作用就是让能够接受未知类型的数据 可以把 ?看成所有类型,是一种真实的类型类型通配符是实参,不是形参 固定上边界的通配符 采用<?...} } 图片 8.数组的创建 Java 是不能直接创建对象和数组的 主要原因是 Java 有类型擦除,任何类型擦除之后就变成了 Object 类型或者对应的上限类型 那定义的如果需要用到数组

33300

Java的协变与逆变

对于更通用的来说,对于支持协变的,程序只能调用以为返回值类型方法;不能调用形参为方法。例如如下代码。...extends Number>也是支持协变的,因此该类型的变量只能调用返回值为方法,不能调用形参为方法——如上①号代码所示。...因此对于逆变的集合,程序只能向集合添加元素——添加元素的类型总能符合上限——而集合元素总是上限的,因此完全没问题;但程序不能从集合取出元素——因为编译器无法确定集合元素具体是下限的哪个—...对于更通用的来说,对于支持逆变的,程序只能调用以为形参的方法;不能调用形参为返回值类型方法(除非将返回值当成Object处理)。例如如下代码。...// 该方法的Integer参数总符合下限,下限一派生自 intApp.setInfo(3); // 逆变的,调用以为返回值的方法,该返回值只能被当成Object

1.2K40

【C++】编程 ⑧ ( 模板继承语法 | 普通 继承 模板语法 | 模板 继承 模板语法 | 继承模板必须指定具体的类型参数列表 | 继承 模板 必须重写构造函数 )

子类 : // 模板 继承时 , 需要具体化 模板 // 也就是 指定 模板 的 类型参数列表 , 将 类型 固定下来 // C++ 编译器 只有知道了具体类型 , 才能知道 占用内存大小..., 继承上述模板 , 模板子类 与 普通子类 区别就是 , 模板子类 需要在尖括号中指定 具体的 类型参数列表 的 数据类型 ; 此时 , 继承时 , 被继承的 模板 必须 声明 类型参数列表..., 将具体的类型写在尖括号 , C++ 编译器需要知道 具体的 数据类型 是什么 , 才能生成 具体的 , 只有这样 , 将具体的数据类型固定下来 , C++ 编译器 才能知道 所占的...Father 模板 继承 模板 时 , 也需要 指定 模板 的具体 类型 , 只是这个类型可以是 另外一个 T ; 下面的代码 是 模板 继承 模板的 代码 , Son2... T , 与 Father 的 T 没有任何关系 , 也就是说 Son2 类型 T 相当于 普通 继承 模板 的 具体类型 int , Father T 已经被覆盖掉了

42830

只用这一篇Java的文章,保证你面试对答

使用过程,操作的数据类型被指定为一个参数,这种参数类型可以用在、接口和方法,分别被称为接口、方法。...方法 实例化时指明的具体类型方法调用方法时指明的具体类型方法可以是普通方法、静态方法、抽象方法、final修饰的方法以及构造方法。...//2、只有声明了的方法才是方法的使用了的成员方法并不是方法。 //3、表明该方法将使用类型T,此时才可以方法中使用类型T。...上述这种类型的通配符也称作无界通配符,有两种应用场景: 可以使用Object中提供的功能来实现的方法。 使用不依赖于类型参数的方法getData中使用了?...作为通配符,但在某些场景下,需要对类型实参进行上下边界的限制。类型实参只准传入某种类型或某种类型子类

94930

Java从入门到精通九(Java

Java从入门到精通九(Java说明 使用的好处 接口 引入类型通配符 不变,协变,逆变 用通配符支持协变和逆变(开挂行为) 方法 方法与可变参数 上界下界 数组...E - Element (集合中使用,因为集合存放的是元素) T - Type(Java ) K - Key(键) V - Value(值) N - Number(数值类型) ?...- 表示不确定的 java 类型 这种标记符可以用在,接口,方法,我们可以称之为接口,方法。...; import java.util.Collection; import java.util.List; //一个基本的前提:赋值给子类,而子类可以赋值给...{ ... } publicvoid show(T t) { ... } 如果再声明了方法方法使用的类型T可以与的T不是同一种类型,也就是T不等于

64410

一文带你玩转“

常见的语法糖: 类型擦除 自动装箱与拆箱,变长参数 增强for循环 内部类与枚举 可以用在、接口、方法,分别称为接口、方法。...extendsE>; extends关键字表示这个的参数必须是 E 或者 E 的子类。 3、下边界通配符, : 主要是用于第二种: 使用或者方法(不推荐使用,因为这样使用会存在很多莫名奇妙的问题),: List 表示: 参数必须是E类型或者E的子类【这个只能用于方法参数,或者变量修饰,不能修饰接口或】 下边界通配符 表示: 参数必须是E或者E的,直至Object类型【这个只能用于方法参数,或者变量修饰,不能修饰接口或】 非限定通配符: 使用一个单独的T(或者A-Z任意字母)表示,它表示没有任何的限制

53420

基础篇:深入解析JAVA

(type parameter)这种参数类型可以用在、接口和方法的创建中,分别称为接口、方法 : 把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型 3 方法的示例...,最初的初始化的String不见了 5 的继承 子类可以指定参数,可以是已知(Integer、String等),也可以用子类自己的参数指定 被继承时,且指定参数,则额外生成的...ParameterizedType类型作为子类;如果没有指定参数,则直接继承原生类型 public class MainTest { T param; static...;或者属性定义A,并使用A的参数T时,其参数都会被编译器定为变量TypeVariable,而不是被擦除 public class MainTest {...) // 2 获取内部定义的属性,需指定具体参数 // 3 局部代码,可以通过的匿名内部子类(需指定具体参数)获取ParameterizedType类型 public class MainTest

1.3K20

详解高级特性

指代一种参数类型,可以声明方法和接口上。...T getField() { // 方法内也可以使用类型 return field; } } 把声明方法上时: public [static] void...最后是接口中声明,如上面的快排,我们使用了 Comparable的接口,与此类似的还有 SearializableIterable等,其实在接口中声明与声明并没有什么太大区别。...实际上,实现了的代码的字节码内会有一个 signature 字段,其中指向了常量表的真正类型,所以的真正类型,还可以通过反射获取得到。...List 取出来的一定是可以转换为 Generics,所以 get 方法没问题;而具体是什么,我们并不知道,将强制转换成子类可能会造成运行期错误,所以编译器不允许这种情况; 而同理 <?

53410
领券