相关文章推荐
沉着的生菜  ·  python识别当前屏幕特定文字坐标 - ...·  1 年前    · 
豪爽的钱包  ·  命名空间“System.Net”中不存在类型 ...·  2 年前    · 
淡定的李子  ·  使用foreach标签+IN,代替for循环 ...·  2 年前    · 
微笑的松球  ·  数据库百科---实现多标签筛选_关系型数据库 ...·  2 年前    · 
快乐的水煮肉  ·  linux中怎样实现不换行拼接 - ...·  2 年前    · 
小百科  ›  java - 有个api方法接受泛型对象参数,如何通过反射调用该方法? -
object api test 泛型
仗义的竹笋
2 年前
segmentfault segmentfault
注册登录
问答 博客 标签 活动
发现
✓ 使用“Bing”搜本站 使用“Google”搜本站 使用“百度”搜本站 站内搜索
注册登录
  1. 首页
  2. 问答
  3. java
  4. 问答详情

有个api方法接受泛型对象参数,如何通过反射调用该方法?

头像
arms01
721 2 44 86
发布于
2017-09-05

api类似

public <T> void do(T o){...}

有个pojo对象 MyAction a 作为参数通过反射传给API执行。
但是无法获取到这个do方法,
获取方法的代码如下

class<?>[] types = {MyAction.class};
Method m = cls.getMethod("do", types);//这里报错,获取不到该方法

应该怎么写才能通过反射获取到该do方法?

java
阅读 6.8k
2 个回答
得票 最新
头像
mizhoux
3k 4 20 42
发布于
2017-09-05
✓ 已被采纳

因为泛型擦除的缘故,编译之后该方法就成了:

public void do (Object o) {...}

所以获取的时候直接参数类型是使用 Object.class:

import java.lang.reflect.Method;
public class Test<T> {
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Test.class;
        Method method = clazz.getMethod("test", Object.class); // 参数类型为 Object.class
        Test test = new Test();
        String param = "Hello world";
        method.invoke(test, param);
 
推荐文章
沉着的生菜  ·  python识别当前屏幕特定文字坐标 - CSDN文库
1 年前
豪爽的钱包  ·  命名空间“System.Net”中不存在类型或命名空间名称“Http”。是否缺少程序集引用?_命名空间“system.net”中不存在类型或命名空间名“http”(是否缺少程序集引用?)-CSDN博客
2 年前
淡定的李子  ·  使用foreach标签+IN,代替for循环中多次查询数据库_用foearch标签实现一个简单的in查询sql:-CSDN博客
2 年前
微笑的松球  ·  数据库百科---实现多标签筛选_关系型数据库标签筛选怎么做_攻城狮小趙的博客-CSDN博客
2 年前
快乐的水煮肉  ·  linux中怎样实现不换行拼接 - SegmentFault 思否
2 年前
Link管理   ·   Sov5搜索   ·   小百科
小百科 - 百科知识指南