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;
}
分享到:
相关推荐
在这个特定的案例中,"基于泛型反射的数据层封装"是利用了Java的泛型和反射特性来实现这一目标。泛型提供了一种在编译时类型安全的方式,允许我们创建可以处理多种类型的类、接口和方法。而反射则是Java提供的一种...
先说一下遇到的问题:通过使用GSON泛型进行报文转换的时候想要对部分关键字段加密,发现在封装好的方法中,对个别字段的加密满足不了。 解决过程:首先通过反射获取到bean下的对象名称。 对象名称获取到了之后需要...
泛型和反射是Java编程语言中的两个重要特性,它们各自有着独特的功能,但在某些场景下也可以结合使用。本文将深入探讨这两个概念以及相关的使用方法。 首先,我们来了解泛型。泛型是Java 5引入的一项特性,它允许在...
在C#编程中,泛型和反射是两种强大的特性,它们各自有着独特的功能,并且在特定情况下可以结合使用,以实现更加灵活和高效的代码。本文将深入探讨这两个概念及其联合应用。 首先,让我们理解什么是泛型。泛型是C# ...
反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。 比如: Pool<Point> pool = new Pool(){}; Point p = pool.get(x, y); //在此构造Point对象 ... pool.put(p); 希望能帮助那些为查找泛型构造器、...
JAVA中 关于泛型 以及反射的例子 欢迎下载 一起研究
同时,因为反射会带来性能损失,因此,可根据自己需求,针对每个类型轻松在两种模式之前切换,本例源码,测试实例俱全,而且代码浅显易懂,只要对泛型、反射、三层架构有一定了解的人都能轻松学习
Java基础入门系列是帮助初学者掌握Java编程的重要学习材料,本篇主要介绍了泛型、反射和注解这三大高级特性。 泛型是Java SE 5版本引入的一个新特性,它的主要目的是允许在使用类、接口和方法时能够引用到任何类型...
对java泛型以及反射机制进行原理和应用上的讲解,帮助初学者对这两个概念进行更轻松的掌握
在C#中通过反射操作一个List泛型。。
2. 泛型 + 反射:泛型可以与反射结合使用,通过反射的API来获取T的Class。 3. 收敛:泛型可以增加类型安全,减少了强制类型转换的代码。 4. MetaProgramming:泛型可以在编译期搞很多东西,比如MetaProgramming。 ...
基本
在Java编程语言中,泛型和反射是两个非常重要的特性,它们可以极大地提高代码的复用性和灵活性。本文将深入探讨如何结合这两种技术实现一个通用的DAO(Data Access Object)设计模式。 首先,我们来看“泛型”。...
反射+泛型+三层 ^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^
Java 5 引入了泛型和反射两个重要的特性,极大地增强了编程的灵活性和安全性。泛型主要是为了解决在编程中频繁进行类型转换的问题,而反射则允许程序在运行时动态地获取类的信息和调用方法。 泛型类型: 在 Java 5 ...
本篇文章将详细探讨C#中的泛型、反射以及如何利用这些特性来实现自动生成SQL语句。 **一、C# 泛型** 泛型是C#的一个核心特性,它允许我们编写类型参数化的代码,即代码可以在多种数据类型上工作,而无需进行显式的...
系统的核心技术包括泛型反射和泛型Ado.net,这两种技术的应用极大地提高了系统的灵活性和性能。 首先,我们要理解什么是泛型。在.NET框架中,泛型是一种强大的工具,它允许我们在不指定具体数据类型的情况下创建类...
Java 中利用泛型和反射机制抽象DAO的实例 Java 中利用泛型和反射机制抽象DAO的实例是指在 Java 中使用泛型和反射机制来抽象出一个通用的DAO(Data Access Object),从而将DAO抽象到另一层次,提高代码的质量和可...
鉴于使用三层架构的过程中,数据库变动造成大量代码改动的问题,特意对三层架构进行了改进,数据库变动只需要简单...本例源码,测试实例俱全,而且代码浅显易懂,只要对泛型、反射、三层架构有一定了解的人都能轻松学习
使用反射和泛型,我们可以编写一个通用方法,接收`DataReader`和类型信息作为参数,然后逐行读取数据,利用反射实例化指定类型的对象并设置属性值。 示例代码可能如下: ```csharp public static T ...