根据入参,通过反射获取入参类型的CLASS
时间: 2024-05-11 17:14:18 浏览: 32
可以使用Java的反射机制中的getClass()方法来获取入参类型的Class对象。
示例代码如下:
```java
public void test(Object obj) {
Class<?> clazz = obj.getClass();
System.out.println(clazz.getName());
}
```
在上面的代码中,首先通过obj对象的getClass()方法获取到obj对象的类型,然后通过getName()方法获取到该类型的全限定名并输出。
需要注意的是,如果obj为null,则会抛出NullPointerException异常。因此,在实际使用中应该先判断obj是否为null,以避免异常的发生。
相关问题
如何通过反射获取一个方法的入参
在Java中,你可以使用`java.lang.reflect.Method`类的静态方法`getParameters()`来获取一个方法的所有输入参数。这个方法返回一个`MethodParameter[ ]`类型的数组,其中每个元素都是`MethodParameter`对象,包含了参数的信息,如名称、类型等。
下面是一个简单的示例:
```java
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) {
try {
// 获取某个类的方法
Class<?> clazz = MyClass.class;
Method method = clazz.getMethod("myMethod", int.class, String.class);
// 获取方法的参数列表
Parameter[] parameters = method.getParameters();
for (Parameter param : parameters) {
System.out.println("参数名称: " + param.getName());
System.out.println("参数类型: " + param.getParameterType().getName());
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
class MyClass {
public void myMethod(int num, String str) {}
}
```
在这个例子中,`getParameters()`会返回包含两个`Parameter`对象的数组,分别对应整数和字符串类型的参数。
泛型入参如何获取正确对象类型
在 Java 中,可以使用反射来获取泛型入参的正确对象类型。具体来说,可以通过以下代码获取泛型入参的 Class 对象:
```java
public class Example<T> {
public void method(T param) {
Class<T> clazz = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
// ...
}
}
// 使用示例
public class ExampleImpl extends Example<String> {
// ...
}
```
在这个示例中,`Example` 类定义了一个泛型参数 `T`,并在 `method` 方法中接受一个 `T` 类型的参数 `param`。在 `method` 方法中,可以通过反射获取当前类的泛型超类(即 `Example<String>`)的泛型参数类型的 Class 对象。
具体来说,可以使用 `getClass().getGenericSuperclass()` 方法获取当前类的泛型超类的 `Type` 对象,然后使用 `(ParameterizedType)` 强制转换为 `ParameterizedType` 类型,最后通过 `getActualTypeArguments()` 方法获取泛型参数类型的数组,取第一个元素即可。由于泛型参数类型在编译时已经确定,因此这样的类型转换是安全的。
需要注意的是,这种方式只适用于泛型超类(即 `Example<String>`)中的泛型参数类型,对于其他类型的泛型参数(如泛型方法参数)则需要使用其他方式来获取泛型参数类型。