`
xuji
  • 浏览: 11440 次
社区版块
存档分类
最新评论

java 反射 如何获得子类继承的父类泛型参数

阅读更多
   废话不多说,把下面这个方法跑一下,就OK了,参数是子类Class,返回值是子类继承父类时给父类传入的泛型参数,该方法假定父类只有一个泛型参数,否则抛出异常。
   public static Class getGenericSuperclassBounds(Class childClass){
Type type = childClass.getGenericSuperclass();
while(!(type instanceof Class)){
if(type instanceof WildcardType){
type = ((WildcardType)type).getUpperBounds()[0];
}
else if(type instanceof TypeVariable<?>){
type = ((TypeVariable<?>)type).getBounds()[0];
}
else if(type instanceof ParameterizedType){
ParameterizedType ptype = (ParameterizedType)type;
Type[] types = ptype.getActualTypeArguments();
if(types==null||types.length==0){
return Object.class;
}
if(types.length>1){
throw new RuntimeException(childClass.getName()+"继承的泛型"+ptype+"的实参数量多于1个");
}
type = ptype.getActualTypeArguments()[0];
}
else if(type instanceof GenericArrayType ){
type = ((GenericArrayType)type).getGenericComponentType();
}
}
return (Class)type;
}
0
0
分享到:
评论

相关推荐

    反射处理java泛型_.docx

    获取泛型参数通常在子类继承泛型父类时有需求。例如,有一个泛型基类`Foo&lt;T&gt;`,其子类`FooChild`传入了一个具体的泛型参数`Bar`,要获取这个参数类型,通常有两种常见做法: a. 在基类中定义一个构造函数,传入...

    java 泛型入门 实例

    - 当子类继承泛型父类时,可以指定不同的类型参数,实现多态性。 - 也可以使用类型参数`&lt;?&gt;`来表示父类的泛型类型不确定,这样在子类中可以操作父类的方法,但不能访问具体的泛型类型信息。 7. **野指针警告** -...

    Java让泛型实例化的方法

    在上面的代码中,我们使用 `getClass().getGenericSuperclass()` 方法获取当前类的父类,然后使用 `ParameterizedType` 对象获取泛型类型参数。最后,我们使用 `clazz.newInstance()` 方法实例化泛型对象。 完整...

    java反射入门

    Java反射机制为开发者提供了强大的能力,可以动态加载类、创建对象、访问私有成员、处理泛型等。然而,反射也可能会降低程序的性能,并且可能导致安全问题,因此在使用时需要谨慎。在理解了这些基本概念后,你可以...

    Java开发技术大全(500个源代码).

    deriveClass.java 子类访问父类变量示例 getLinePara.java 获取命令行参数示例 hasStaticMethod.java 静态成员方法示例 hasStatMember.java 静态成员变量示例 HelloNative.c 用C写的一个小程序 HelloNative....

    泛型编程小实例(以List为例)

    泛型可以与多态结合,允许子类继承父类的泛型方法,并自定义类型参数。这增强了代码的灵活性和扩展性。 通过上述的讲解和实践,我们可以更好地理解和运用泛型编程,提升代码的质量和效率,减少潜在的类型错误。在...

    Java1.5泛型指南

    协变返回类型允许子类覆盖父类的方法时,返回类型可以是父类返回类型的子类型,这在泛型上下文中尤为重要,能够保持代码的灵活性和类型安全性。 #### 六、泛型的实际应用与注意事项 在实际编程中,合理运用泛型...

    Java泛型PPT教案学习.pptx

    例如,一个通用的交换两个元素的方法可以声明为`public static &lt;T&gt; void swap(T[] arr, int i, int j)`,这里的T是方法的泛型参数,允许传入任何类型的数组。 4. **泛型通配符**: 在处理多种类型但又不想为每种...

    Java1.5泛型指南中文版

    泛型同样支持子类继承。例如,如果有一个 `List&lt;Number&gt;`,那么 `List&lt;Integer&gt;` 可以被视为它的子类,这是因为 Integer 是 Number 的子类。然而,这种关系并非总是直觉上的那么简单,特别是当涉及到类型转换和实例...

    Java中泛型的各种使用

    泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法中使用类型参数。类型参数类似于函数参数,但它们代表的是类型而不是值。例如,`List&lt;T&gt;`中的`T`就是一个类型参数,`T`代表某种具体的类型,如`String`、`...

    华为JAVA开发工程师必考面试题(含答案).docx

    如果子类中定义了一个与父类中相同名称、相同返回类型且参数列表完全相同的方法,那么就认为是重写了父类的方法。重写主要用于子类扩展父类的功能,使得子类具有不同的行为。需要注意的是,重写的方法必须保持与被...

    第十三章 泛型程序设计

    - 如果子类没有指定类型参数,那么子类默认继承父类的无界类型参数,如`class DerivedBox extends Box {...}`相当于`class DerivedBox extends Box&lt;Object&gt; {...}`。 7. **泛型与实例化** - 泛型类的实例化必须...

    Java基础核心知识点总结(79页).pdf

    继承允许子类继承父类的属性和方法,实现代码的复用。多态是指一个接口或父类引用可以指向不同子类的对象,实现动态绑定。组合是将一个对象作为另一个对象的成员变量,实现复杂对象的构建。代理模式则提供了在运行时...

    Java应用编程100例

    继承则允许子类继承父类的属性和方法,实现代码重用。多态性意味着一个接口可以有多种不同的实现,这在处理不同类型的对象时非常有用。 在"Java应用编程100例"中,可能包含以下主题: 1. 基本语法:如变量声明、...

    个人写的关于Java笔记,较为全面

    Java 泛型(Java Generics)是一种类型参数化机制,用于定义类型安全的类和方法。泛型可以提高代码的可读性和可维护性。 日期处理 Java 提供了多种日期处理类,如 Date、Calendar、LocalDateTime 等,用于处理日期...

    Java Gossip(一)

    4. **继承**:继承允许子类继承父类的属性和方法,提高了代码的复用性。Java中的继承使用`extends`关键字来实现,单继承是其特性,即一个类只能有一个直接父类。 5. **多态**:多态允许不同类型的对象对同一消息...

    10道 基础 Java 面试题

    继承允许子类继承父类的方法和属性,同时可以重写父类的方法,从而实现多态;而接口则允许不同的类通过实现同一个接口来达到多态的效果。在 Java 中,多态性是通过方法重写和方法重载来实现的。方法重写是指子类提供...

    java 30个基本概念

    11. **扩展类(Extending Class)**:通过`class SubClass extends SuperClass`的形式,子类可以继承父类的属性和方法。 12. **多态(Polymorphism)**:Java中的多态性是指对象变量可以指向多种类型的实例,允许...

Global site tag (gtag.js) - Google Analytics