`

getGenericSuperclass与getGenericInterfaces

    博客分类:
  • java
 
阅读更多

 

个人理解:这两个方法就是得到超类的泛型类型 和 接口的泛型类型 

代码:

  

1 基础类:

package test2;

public class AccessibleTest extends Person<Test> implements SuperPerson<Person>{

    private int id=1;  
    private String name="网";
    
    public AccessibleTest(){
    	System.out.println( "accesible Test");
    }
    
    public int getId() {
		return id;
	}
 
    public String getName() {
		return name;
	}

	@Override
	public void saySuperPerson(Person t) {
//		 System.out.println( t );
		
	}
}

 

2 超类

package test2;



public class Person<T>   {
 
	public Person(){
		System.out.println( getClass()+"======Person==" );
	}
	private String   name="wangtony" ;
	
	private Integer age =12;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	} 
	


}

 3 接口 

 

package test2;

public interface SuperPerson<T> {

	public void saySuperPerson(T t);
}

 4 测试类 

 

package test2;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class Test2 {
 
	
	public static void main(String[] args) throws  Exception  {
		
//		Entity[] e = new Entity[2];
//		e[0] = new Entity();
//		int[] i = {1,3};
		
  
        Class clazz = Class.forName("test2.AccessibleTest");  
        AccessibleTest a = new AccessibleTest(); 
        clazz = a.getClass();
		Type genType = clazz.getGenericSuperclass(); //得到这个类的父类 的参数类型

		
		if (genType instanceof ParameterizedType) { //如果是 泛型的参数类型 ,就得到泛型类型 
			Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); //强转换为参数类型 
			for(Type t : params ){
				System.out.println( t );
			}
			System.out.println( "==========");
		}
		
		//得到接口的泛型类型 
		Type[] type1 = clazz.getGenericInterfaces();
		if( type1!=null && type1.length>0 ){ 
			for(int i=0;i<type1.length;i++ ){ //循环泛型类型 
				
				//如果得到的泛型类型是 ParameterizedType(参数化类型)类型的话
				if(ParameterizedType.class.isAssignableFrom( type1[i].getClass()  )  ){ 
					ParameterizedType ptype = (ParameterizedType)type1[i];//将类型转换为 参数类型类 
					Type[] iType = ptype.getActualTypeArguments(); //得到  泛型类型的实际  类型 
					for(Type p1 : iType){
						System.out.println(p1 +"=======" );
					}
				}
			}
		}

	}

 
}

 

分享到:
评论

相关推荐

    Java泛型_Java中的泛型结构_

    - 如果需要在运行时获取泛型信息,可以使用 `getGenericSuperclass()` 或 `getGenericInterfaces()` 等方法,但通常需谨慎处理。 总的来说,Java泛型为开发者提供了更高级别的抽象,提高了代码的清晰度、类型安全...

    Java泛型总结(2)进阶篇

    虽然泛型在运行时被擦除,但反射仍然可以在某种程度上检测泛型信息,主要是通过类的`getGenericSuperclass()`和`getGenericInterfaces()`方法。 综上所述,Java泛型的进阶使用涉及多个方面,包括通配符、边界、...

    北大青鸟ACCP6.0 第三学期 Y2 JAVA方向 reflection 反射

    虽然Java泛型在编译后会被擦除,但反射仍可以提供一些关于泛型类型的信息,如`getGenericSuperclass()`和`getGenericInterfaces()`方法可获取带有类型参数的父类和接口信息。 七、异常处理 在使用反射时,需要注意...

    第十三章 泛型程序设计

    - 反射中,虽然运行时无法获取泛型信息,但可以通过类的`getGenericSuperclass()`和`getGenericInterfaces()`方法获取到带有类型参数的类和接口信息。 10. **泛型与集合框架** - Java集合框架全面采用了泛型,如...

    Java反射机制

    5. **处理泛型**:虽然Java的泛型在编译后会被擦除,但反射仍然可以提供关于泛型类型的信息,如`getGenericSuperclass()`和`getGenericInterfaces()`等方法。 6. **Java集合的类型安全**:在处理集合时,反射可以...

    博客《反射(2):泛型相关周边信息获取》对应源码

    例如,我们可以使用 `Class&lt;T&gt;.getGenericSuperclass()` 或 `Class&lt;T&gt;.getGenericInterfaces()` 来获取类的父类或接口的泛型信息。这些方法返回的是 `Type` 接口的实现,如 `ParameterizedType`,`WildcardType` 等...

    Java Reflection In Action 源代码

    5. **泛型处理**:反射还可以处理泛型信息,虽然在运行时会丢失类型参数的具体信息,但可以通过`getGenericSuperclass()`和`getGenericInterfaces()`等方法获取到泛型声明。 6. **接口实现**:反射也支持检查类是否...

    Java反射机制(推荐)

    7. **泛型与反射**:虽然Java的泛型在编译后会被擦除,但反射仍然可以获取到泛型的信息,例如`getGenericSuperclass()`和`getGenericInterfaces()`可以获取到父类和接口的泛型类型。 8. **注解处理**:反射也可以...

    类的反射机制

    6. **处理泛型**:虽然Java的泛型在编译后会被擦除,但反射可以通过`getGenericSuperclass()`和`getGenericInterfaces()`等方法获取到泛型信息。 7. **枚举和注解**:反射也可以用来处理枚举类型和注解,获取枚举...

    Java反射机制学习(二)

    虽然Java的泛型在编译后会被擦除,但在反射中我们仍然可以通过`getGenericInterfaces()`和`getGenericSuperclass()`获取到泛型信息。 7. **应用案例**: - 插件化开发:通过反射加载未知的插件类,实现模块间的...

    java中的反射reflect

    尽管Java的类型擦除导致编译后的泛型信息丢失,但反射可以通过`Class`对象的`getGenericSuperclass()`或`getGenericInterfaces()`方法获取到泛型的实际类型参数。 `TestSingleton.java`和`Singleton.java`则可能与...

    Java利用反射获取类信息

    `Class`对象的`isInterface()`判断是否为接口,`getGenericSuperclass()`和`getGenericInterfaces()`获取父类或接口的泛型类型。 7. 注解处理: 反射提供了访问注解的能力,`Class`、`Method`、`Field`等都提供了`...

    反射机制.rar

    7. **泛型处理**: 虽然Java反射不直接支持泛型,但通过`getGenericSuperclass()`和`getGenericInterfaces()`等方法可以获取到带有类型信息的泛型声明,从而间接地处理泛型。 8. **枚举和注解**: 反射同样可以用于...

    利用反射绕过编译器和hashcode高级应用

    `Class&lt;?&gt;`对象的`getGenericSuperclass()`和`getGenericInterfaces()`方法可以帮助我们获取泛型的实际类型参数。 接下来,我们转向hashcode的高级应用: 1. 哈希表优化:`hashCode()`方法是实现哈希数据结构(如...

    Java反射相当的文档及示例

    6. **泛型处理**:虽然Java的泛型在运行时被擦除,但反射可以提供一些关于类型参数的信息,如`getGenericSuperclass()`和`getGenericInterfaces()`方法。 7. **接口实现检查**:通过`isInstance()`方法,我们可以...

    java反射基本方法测试

    例如,`getGenericSuperclass()`和`getGenericInterfaces()`可以获取类的泛型超类和接口,`getGenericParameterTypes()`和`getGenericReturnType()`可以获取方法的泛型参数和返回类型。 八、安全性与性能 11. 反射...

    Java反射机制学习总结

    反射也可以处理泛型信息,虽然在运行时泛型信息会被擦除,但可以通过`getGenericInterfaces()`、`getGenericSuperclass()`、`getGenericParameterTypes()`等方法获取到泛型类型参数。 8. 注解处理: 反射可以用来...

    Day43 Java反射(二)

    - 通过`Class.getGenericSuperclass()`或`Class.getGenericInterfaces()`获取带有泛型的超类或接口。 2. **解析泛型信息**: - 使用`ParameterizedType`接口获取泛型参数的类型。 #### 反射的实际应用 1. **...

Global site tag (gtag.js) - Google Analytics