`
zyz611
  • 浏览: 95981 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

泛型反射

 
阅读更多
package genericType;

import java.lang.reflect.Field;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Arrays;

public class GenericArrayTypeExample {
 
    public static void main(String[] args) throws NoSuchFieldException,
            SecurityException {
        printFieldType(ArrayBean.class, "arrayType");
        System.out.println("\n");
        printFieldType(ArrayBean.class, "genericArrayType");
        System.out.println("\n");
        printFieldType(ArrayBean.class, "genericMultiArrayType");
        System.out.println("\n");
        printFieldType(ArrayBean.class, "specialMultiArrayType");
    }
 
    private static void printFieldType(Class<?> clazz, String fieldName)
            throws NoSuchFieldException, SecurityException {
        System.out.println("Type details of field " + fieldName);
        Field field = clazz.getField(fieldName);
        System.out.println("Declared class: " + field.getDeclaringClass());
        Type genericType = field.getGenericType();
        System.out.println("Generic type: " + genericType.getTypeName());
        Type type = field.getType();
        System.out.println("Type: " + type.getTypeName());
        if (isGenericArrayType(genericType)) {
            printGenericFieldType((GenericArrayType) genericType);
        }
        if (isParameterizedType(genericType)) {
            printParameterizedType((ParameterizedType) genericType);
        }
    }
 
    private static void printGenericFieldType(GenericArrayType genericArrayType) {
        Type componentType = genericArrayType.getGenericComponentType();
        System.out.println("Component type of : "
                + genericArrayType.getTypeName() + " is "
                + componentType.getTypeName());
        if (isGenericArrayType(componentType)) {
            printGenericFieldType((GenericArrayType) componentType);
        }
        if (isParameterizedType(componentType)) {
            printParameterizedType((ParameterizedType) componentType);
        }
    }
 
    private static boolean isGenericArrayType(Type type) {
        if (GenericArrayType.class.isAssignableFrom(type.getClass())) {
            System.out.println("Is GenericArrayType ? true");
            return true;
        }
        return false;
    }
 
    private static boolean isParameterizedType(Type type) {
        return ParameterizedType.class.isAssignableFrom(type.getClass());
    }
 
    private static void printParameterizedType(ParameterizedType parmType) {
        System.out.println("Parameterized type details of " + parmType); 
        System.out.println("Type name " + parmType.getTypeName());
        System.out.println("Raw type: " + parmType.getRawType());
        System.out.println("Actual type arguments: "
                + Arrays.asList(parmType.getActualTypeArguments()));
        for (Type type : parmType.getActualTypeArguments()) {
            if (isParameterizedType(type)) {
                printParameterizedType((ParameterizedType) type);
            }
        }
    }
}


package genericType;

import genericType.demo.SomeBean;

import java.util.List;

public class ArrayBean {
    public List[] arrayType;
    public List<String>[] genericArrayType;
    public List<String>[][] genericMultiArrayType;
    public List<SomeBean<String, Integer>>[][] specialMultiArrayType;
}
分享到:
评论

相关推荐

    基于泛型反射的数据层封装+MSSQLJDBC3.0驱动

    在这个特定的案例中,"基于泛型反射的数据层封装"是利用了Java的泛型和反射特性来实现这一目标。泛型提供了一种在编译时类型安全的方式,允许我们创建可以处理多种类型的类、接口和方法。而反射则是Java提供的一种...

    java泛型反射注解

    先说一下遇到的问题:通过使用GSON泛型进行报文转换的时候想要对部分关键字段加密,发现在封装好的方法中,对个别字段的加密满足不了。 解决过程:首先通过反射获取到bean下的对象名称。 对象名称获取到了之后需要...

    泛型 反射 相关概念方法使用

    泛型和反射是Java编程语言中的两个重要特性,它们各自有着独特的功能,但在某些场景下也可以结合使用。本文将深入探讨这两个概念以及相关的使用方法。 首先,我们来了解泛型。泛型是Java 5引入的一项特性,它允许在...

    泛型反射联合使用.zip

    在C#编程中,泛型和反射是两种强大的特性,它们各自有着独特的功能,并且在特定情况下可以结合使用,以实现更加灵活和高效的代码。本文将深入探讨这两个概念及其联合应用。 首先,让我们理解什么是泛型。泛型是C# ...

    利用反射生成泛型类对象

    反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。 比如: Pool&lt;Point&gt; pool = new Pool(){}; Point p = pool.get(x, y); //在此构造Point对象 ... pool.put(p); 希望能帮助那些为查找泛型构造器、...

    泛型反射例子

    JAVA中 关于泛型 以及反射的例子 欢迎下载 一起研究

    基于泛型和反射的三层架构雏形(另一个旧版不能删除)

    同时,因为反射会带来性能损失,因此,可根据自己需求,针对每个类型轻松在两种模式之前切换,本例源码,测试实例俱全,而且代码浅显易懂,只要对泛型、反射、三层架构有一定了解的人都能轻松学习

    Java基础入门四泛型反射注解.pdf

    Java基础入门系列是帮助初学者掌握Java编程的重要学习材料,本篇主要介绍了泛型、反射和注解这三大高级特性。 泛型是Java SE 5版本引入的一个新特性,它的主要目的是允许在使用类、接口和方法时能够引用到任何类型...

    java泛型和反射机制

    对java泛型以及反射机制进行原理和应用上的讲解,帮助初学者对这两个概念进行更轻松的掌握

    C#中通过反射操作泛型

    在C#中通过反射操作一个List泛型。。

    Java泛型的用法及T.class的获取过程解析

    2. 泛型 + 反射:泛型可以与反射结合使用,通过反射的API来获取T的Class。 3. 收敛:泛型可以增加类型安全,减少了强制类型转换的代码。 4. MetaProgramming:泛型可以在编译期搞很多东西,比如MetaProgramming。 ...

    枚举泛型反射以及一些基本

    基本

    java 基于泛型与反射的通用 DAO

    在Java编程语言中,泛型和反射是两个非常重要的特性,它们可以极大地提高代码的复用性和灵活性。本文将深入探讨如何结合这两种技术实现一个通用的DAO(Data Access Object)设计模式。 首先,我们来看“泛型”。...

    反射+泛型+三层例子

    反射+泛型+三层 ^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^

    JAVA5泛型和反射

    Java 5 引入了泛型和反射两个重要的特性,极大地增强了编程的灵活性和安全性。泛型主要是为了解决在编程中频繁进行类型转换的问题,而反射则允许程序在运行时动态地获取类的信息和调用方法。 泛型类型: 在 Java 5 ...

    C#泛型、反射实例、自动生成sql语句

    本篇文章将详细探讨C#中的泛型、反射以及如何利用这些特性来实现自动生成SQL语句。 **一、C# 泛型** 泛型是C#的一个核心特性,它允许我们编写类型参数化的代码,即代码可以在多种数据类型上工作,而无需进行显式的...

    人才招聘网

    系统的核心技术包括泛型反射和泛型Ado.net,这两种技术的应用极大地提高了系统的灵活性和性能。 首先,我们要理解什么是泛型。在.NET框架中,泛型是一种强大的工具,它允许我们在不指定具体数据类型的情况下创建类...

    Java 中利用泛型和反射机制抽象DAO的实例

    Java 中利用泛型和反射机制抽象DAO的实例 Java 中利用泛型和反射机制抽象DAO的实例是指在 Java 中使用泛型和反射机制来抽象出一个通用的DAO(Data Access Object),从而将DAO抽象到另一层次,提高代码的质量和可...

    基于泛型和反射的三层架构雏形

    鉴于使用三层架构的过程中,数据库变动造成大量代码改动的问题,特意对三层架构进行了改进,数据库变动只需要简单...本例源码,测试实例俱全,而且代码浅显易懂,只要对泛型、反射、三层架构有一定了解的人都能轻松学习

    DataReader反射泛型实体对象

    使用反射和泛型,我们可以编写一个通用方法,接收`DataReader`和类型信息作为参数,然后逐行读取数据,利用反射实例化指定类型的对象并设置属性值。 示例代码可能如下: ```csharp public static T ...

Global site tag (gtag.js) - Google Analytics