今天刚学习的,来加深一下记忆,以免忘记.
package com.test.generic;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.Vector;
public class GenericTest {
public static void main(String[] args) {
try {
Method method=GenericTest.class.getMethod("getParamType", Vector.class);
Type[] types=method.getGenericParameterTypes();
ParameterizedType pType=(ParameterizedType) types[0];
System.out.println(pType.getActualTypeArguments()[0]);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
public void getParamType(Vector<Date> param){
}
}
首先得了解几个类:
Method就不多说了.
Type:
public interface Type
Type 是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。 从Jdk1.5开始.
ParameterizedType:
public interface ParameterizedType
extends Type
Type[] getActualTypeArguments()
返回表示此类型实际类型参数的 Type 对象的数组。
注意,在某些情况下,返回的数组为空。如果此类型表示嵌套在参数化类型中的非参数化类型,则会发生这种情况。
返回:
表示此类型的实际类型参数的 Type 对象的数组
抛出:
TypeNotPresentException
- 如果任何实际类型参数引用不存在的类型声明
MalformedParameterizedTypeException
- 如果任何实际类型参数引用参数化类型,该类型出于某种原因无法被实例化
getGenericParameterTypes
public Type[] getGenericParameterTypes()
按照声明顺序返回 Type 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型的。如果底层方法不带参数,则返回长度为 0 的数组。
如果形参类型是参数化类型,则为其返回的 Type 对象必须实际反映源代码中使用的实际类型参数。
如果形参类型是类型变量或参数化类型,则创建它。否则将解析它。
返回:
按照声明顺序返回表示底层方法的形参类型的 Type 对象数组
抛出:
GenericSignatureFormatError
- 如果一般方法签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式
TypeNotPresentException
- 如果底层方法的所有参数类型都引用不存在的类型声明
MalformedParameterizedTypeException
- 如果所有底层方法的参数类型引用无论如何都无法实例化的参数化类型
我的理解:首先通过反射方法获得特定名称的方法.然后可以按照声明顺序返回 Type 对象的数组,最后获得参数数组中的第一个(在本例中仅此一个)参数.然后可以通过getActualTypeArguments()来得到参数的准确类型.然后syso出来.
分享到:
相关推荐
Java编程语言中的反射和泛型是两个非常重要的概念,它们为开发者提供了强大的工具来操作类、接口、对象以及参数类型。在"myreflect.rar"这个压缩包中,我们可以期待找到一系列关于这两个主题的源代码示例,这将有助...
在实际应用中,反射和泛型的结合通常用于框架和库的开发,如Spring框架就大量使用了这两项技术。例如,Spring通过反射创建bean实例,并利用泛型确保注入的依赖类型正确。 通过深入理解反射和泛型,开发者可以编写出...
泛型和反射是Java编程语言中的两个重要特性,它们各自有着独特的功能,但在某些场景下也可以结合使用。本文将深入探讨这两个概念以及相关的使用方法。 首先,我们来了解泛型。泛型是Java 5引入的一项特性,它允许在...
如果类具有泛型参数,我们可以使用反射来获取实际的泛型类型,从而更好地理解实例化的对象。 2. **动态调用方法**:使用`Class.getMethod()`或`Class.getDeclaredMethod()`获取方法对象,然后调用`invoke()`方法...
泛型是Java 5引入的新特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的类型安全性和可读性。在`BaseDao.java`中,可能会定义一个泛型基类,如: ```java public abstract class BaseDao<T> { public...
例如,使用泛型的 `Hashtable` 可以声明为 `Hashtable, Value>`,其中 `Key` 和 `Value` 是类型参数,表示键和值的具体类型。这样,当向泛型 `Hashtable` 添加或取出元素时,编译器会检查类型是否匹配,无需显式的...
1. **泛型类**: 定义泛型类时,可以使用尖括号来声明类型参数,如`class Container<T>`,T称为类型参数,代表一种未知类型。 2. **类型擦除**: 泛型在编译后会进行类型擦除,因此在运行时无法直接获取泛型类型信息...
具体实现时,我们可以为每个数据库操作创建一个泛型方法,使用反射获取实体类的字段,根据字段生成对应的SQL语句片段。比如在插入操作中,我们可以遍历`T`的所有字段,构建一个`INSERT INTO table_name (field1, ...
类型参数是指在泛型中使用的类型变量,例如 `<T>`。类型参数可以用来指定类型的边界,从而限制类型的使用范围。 使用泛型来限制 Class 类 从 JDK5 以后,Java 的 Class 类增加了泛型功能,从而允许使用泛型来限制 ...
Java反射和泛型是Java编程中的两个重要特性,它们各自有着独特的作用,但在某些场景下也可以结合使用。本文将深入探讨这两个概念,并提供一个综合性的例子来帮助理解。 首先,让我们了解一下Java反射。反射是在运行...
在Java编程语言中,泛型和反射是两个非常重要的特性,它们在软件开发中有着广泛的应用。...在实际项目中,我们需要根据具体情况选择合适的技术,合理地利用泛型和反射,以实现更高效、更可靠的软件系统。
本资源"反射泛型完美版分页.rar"似乎提供了一个结合了这两种特性的分页解决方案,特别适用于处理大量数据的情况。下面我们将详细探讨反射、泛型以及它们如何应用于分页。 首先,让我们理解什么是反射。反射是Java的...
在Java编程语言中,泛型和反射是两个非常重要的特性,它们在开发...在实际应用中,可能还需要考虑更多的细节,比如事务管理、错误处理以及性能优化等,但这个基础框架已经足够展示泛型与反射在数据库操作中的强大功能。
本篇文章将详细探讨C#中的泛型、反射以及如何利用这些特性来实现自动生成SQL语句。 **一、C# 泛型** 泛型是C#的一个核心特性,它允许我们编写类型参数化的代码,即代码可以在多种数据类型上工作,而无需进行显式的...
泛型是在定义类、接口或方法时使用的类型参数,用尖括号 `<T>` 表示。`T` 是一个占位符,代表一个具体的类型,在实际使用时会被具体的类型如 `String` 或 `Integer` 替换。泛型的主要好处在于编译时检查类型安全,...
我们不能直接获取`myList`的泛型类型`T`,但我们可以通过以下方式获取其实际类型参数: ```java Field field = Class.forName("my.package.ParentClass").getDeclaredField("myList"); Type genericType = field....
在提供的压缩包文件“泛型”中,可能包含了一些示例代码,演示了如何在实际项目中结合使用C#的泛型和反射。这些实例可能涵盖了上述的一些使用场景,帮助开发者更好地理解和掌握这两种技术的结合使用。 总的来说,C#...
泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法中使用类型参数。类型参数类似于函数参数,但它们代表的是类型而不是值。例如,`List<T>`中的`T`就是一个类型参数,`T`代表某种具体的类型,如`String`、`...
在Java基础入门四泛型、反射、注解的学习中,我们会了解到如何正确使用泛型来创建更加健壮的代码,如何利用反射机制实现类和对象的动态操作,以及如何利用注解来简化开发过程和提高代码的可读性。 此外,文档中提到...
在.NET框架中,反射、泛型和序列化是三个核心概念,它们对于开发高效、灵活且可维护的应用程序至关重要。让我们深入探讨这三个概念及其在.NET编程中的应用。 **反射** 反射是.NET框架提供的一种强大机制,它允许在...