泛型作为方法返回类型

2024-02-23

我在 StackOverflow 上四处寻找我面临的问题的答案。我遇到了很多好的答案,但仍然没有回答我的问题。

Java中通过反射获取泛型参数的类型 https://stackoverflow.com/questions/1901164/get-type-of-a-generic-parameter-in-java-with-reflection

如何通过检查找到返回类型的参数化类型? https://stackoverflow.com/questions/1213735/how-to-find-the-parameterized-type-of-the-return-type-through-inspection

Java泛型:获取泛型方法的返回类型的类 https://stackoverflow.com/questions/4213972/java-generics-get-class-of-generic-methods-return-type

http://qussay.com/2013/09/28/handling-java-generic-types-with-reflection/ http://qussay.com/2013/09/28/handling-java-generic-types-with-reflection/

http://gafter.blogspot.com/search?q=super+type+token http://gafter.blogspot.com/search?q=super+type+token

这就是我想做的。 使用反射,我想获取所有方法及其返回类型(非泛型)。 我一直在使用Introspector.getBeanInfo这样做。然而,当我遇到返回类型未知的方法时,我遇到了限制。

public class Foo {

    public String name;

    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name = name;
    }
}

public class Bar<T> {

    T object;

    public T getObject() {
        return object;
    }

    public void setObject(final T object) {
        this.object = object;
    }
}

@Test
    public void testFooBar() throws NoSuchMethodException, SecurityException, IllegalAccessException,
            IllegalArgumentException, InvocationTargetException {

        Foo foo = new Foo();
        Bar<Foo> bar = new Bar<Foo>();
        bar.setObject(foo);
        Method mRead = bar.getClass().getMethod("getObject", null);

        System.out.println(Foo.class);// Foo
        System.out.println(foo.getClass());// Foo
        System.out.println(Bar.class);// Bar
        System.out.println(bar.getClass());// Bar
        System.out.println(mRead.getReturnType()); // java.lang.Object
        System.out.println(mRead.getGenericReturnType());// T
        System.out.println(mRead.getGenericReturnType());// T
        System.out.println(mRead.invoke(bar, null).getClass());// Foo
    }

我如何知道方法的返回类型T是通用还是不通用? 我没有奢侈地在运行时拥有一个对象。 我正在尝试使用谷歌TypeToken或者使用抽象类来获取类型信息。 我想交往T to Foo为了getObject方法用于Bar<Foo> object.

有些人认为 java 不保留通用信息。在这种情况下,为什么第一次铸造有效而第二次铸造不起作用。

Object fooObject = new Foo();
bar.setObject((Foo) fooObject); //This works
Object object = 12;
bar.setObject((Foo) object); //This throws casting error

任何帮助表示赞赏。


Bar<Foo> bar = new Bar<Foo>();
Method mRead = bar.getClass().getMethod( "getObject", null );
TypeToken<Bar<Foo>> tt = new TypeToken<Test.Bar<Foo>>() {};
Invokable<Bar<Foo>, Object> inv = tt.method( mRead );
System.out.println( inv.getReturnType() ); // Test$Foo

也许这就是您正在寻找的。 TypeToken 和 Invokable 来自 Google Guava。

€:修复了有关 @PaulBellora 评论的代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

泛型作为方法返回类型 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • 使用 nutch REST api 的 Nutch 弹性索引器中的未知问题

    我试图使用 REST 端点公开 nutch 但在索引器阶段遇到了问题 我正在使用 elasticsearch 索引编写器将文档索引到 ES 我使用了 NUTCH HOME runtime deploy bin nutch startserv
  • 如何通过Webpack和6to5使用带有es6模块的npm包?

    假设我想在我的项目 或任何给定的 npm 包 中使用 Immutable 我有npm install编辑了它 所以它在node modules 当然 它有 CommonJS 导出 然而 我想在我的项目中使用 es6 模块 我使用 Webpa
  • 如何在 AssemblyResolve 事件之前在运行时加载程序集?

    实际上 我尝试在我的解决方案中实现某种 静态链接 程序集 所以我尝试了以下方法 使用 CopyLocal false 添加对我的程序集的引用 使用 添加为链接 将 dll 文件本身添加到我的解决方案中 使用 添加资源 添加现有文件 将 dl
  • 尝试根据当前 URL 中的当前字符串向属性添加类

    我整个早上都在努力让它发挥作用 但没有成功 如果我执行以下代码 persist header a each function var this this if window location href indexOf signage 1 t
  • 使用 JInternalFrame 和一些按钮

    我们可以使用一个JInternalFame https docs oracle com javase tutorial uiswing components internalframe html主框架中有一个按钮 该框架包含一个JDeskt
  • 如何让 CMake 在生成 Visual Studio 解决方案后执行一些脚本

    我正在使用 CMake 来构建一个项目 我想在 CMake 生成解决方案后执行一些脚本 比如 python 脚本 这样我就不必每次都手动执行它 我正在使用 Cmake 2 8 有谁知道 Cmake 为此目的提供的任何 userhook 或其
  • 在 Java 中读取和写入同一个文件

    我想读自criteria txt文件 以标记化并在同一文件的末尾附加标记 程序抛出异常 No file found 我不知道我的错误在哪里 任何建议都会对我有帮助 先感谢您 这是我的代码 import java io import java
  • 如何以 HTML 格式发送 PUT/DELETE 请求?

    我正在 PHP 中制作 REST API 我知道我可以通过以下方式捕获请求方法 SERVER REQUEST METHOD 但是 如何在浏览器中触发 PUT DELETE 请求 我无法想象更改表单标记的方法属性以指定除 GET 或 POST
  • 线程只运行一次

    当线程完成后 您无法使用 start 方法再次运行它 它会抛出异常 谁能解释一下 为什么 这样的架构决策背后的原因是什么 因为在单独的线程中执行代码的方法不是创建一个线程 这与什么是线程的系统视图相关 关于绿色线程和系统线程之间的区别有无穷
  • 防止刷新时插入重复记录而不重定向

    我有这样的脚本 if isset POST comment posted user comment mysql real escape string POST user comment add user comment Event addU
  • 如何获取Unity中正在注入的对象的类型?

    我有一个类型在其构造函数中接收另一个类型 该类型通常是创建它的对象的类型 例如 public class Logger public Logger Type parent 我想指示Unity解决Logger将需要它的对象的类型作为参数传递给
  • WCF Rest 4.0 中不带尾部斜杠的简单 URL 路由

    我有一个基于 WCF REST 服务模板 40 CS 的 WCF REST 4 0 项目 我想公开简单的服务端点 URLwithout尾部斜杠 例如 CarService cs http www domain com cars http w
  • 工具箱 Visual Studio 2015 中缺少报告查看器标记

    我最近安装了 Visual Studio 2015 Community 现在我的工具箱没有报表查看器标签 我的 ASP NET 项目中所有现有的报表查看器都显示 创建控件时出错 我已经检查了所有参考文献 它们似乎没问题 当我运行项目时 报告
  • 如何使用 swt 向表中添加行

    我正在学习 swing 并对将行插入到表格有一个疑问 我的要求是我必须通过按添加按钮添加新行 但我无法继续 请找到下面的代码 如果有人知道请帮助我 public class TableShellExample Display d Shell
  • 如何计算sklearn中交叉验证的每个模型中的特征重要性

    我在用RandomForestClassifier with 10 fold cross validation如下 clf RandomForestClassifier random state 42 class weight balanc
  • 如何在车把模板中使用 {{{{raw-helper}}}}

    我有一个效果很好的车把模板 我希望能够将以下内容放入其中 这显然会在处理车把文件时呈现 所有的 最终都是空白的 这不好 我找到了 raw helper 块助手 并像这样尝试 raw helper
  • 按比例随机将 NA 插入到数据帧中

    我有一个完整的数据框 我希望将数据框中 20 的值替换为 NA 以模拟随机缺失数据 A lt c 1 10 B lt c 11 20 C lt c 21 30 df lt data frame A B C 谁能建议一种快速的方法来做到这一点
  • 获取最大值之前的值

    例如 给定这个稀疏 id 表 id 1 2 3 6 7 我可以使用以下查询从表中获取最高的 id SELECT max id FROM Comics I get id 7 如何获取最高 id 之前的 id 即使值不连续 一般来说 您可以首先
  • VSTO 写入 Excel 中的单元格!

    为什么这有效 Excel Worksheet Application ActiveSheet get Range A1 A1 Value2 text 但这并没有 Excel Worksheet activeSheet Excel Works
  • 泛型作为方法返回类型

    我在 StackOverflow 上四处寻找我面临的问题的答案 我遇到了很多好的答案 但仍然没有回答我的问题 Java中通过反射获取泛型参数的类型 https stackoverflow com questions 1901164 get