使用 ByteBuddy 定义泛型类型的字段

2023-12-29

我刚刚开始使用 ByteBuddy,并且正在研究几个示例以掌握它的窍门。

我试图通过此练习完成的任务是用 ByteBuddy 替换一些使用 ASM 的代码。

到目前为止,我在非泛型类型方面取得了成功。例如,我可以轻松定义一个字段,如下所示

builder.defineField("names", List.class, Visibility.PRIVATE)

如果我只想创建一个原始字段List type.

然而,当谈到引入泛型时,我陷入了困境。

显然我定义该字段的方式(使用Class) 意味着泛型类型丢失。正在阅读文档 http://bytebuddy.net/#/tutorial(特别是Working with generic types部分),如果 List 字段具有已知的泛型类型(例如,如果它是另一个 POJO),我无法真正弄清楚如何构造 List 字段。假设我有以下 POJO:

public class Dummy {
   private String name;

   //getters, setters
}

我想创建一个领域List<Dummy>,我将如何完成这样的任务?

Thanks!


而不是提供一个Class<List>对于defineField方法,您可以提供一个Type。 ByteBuddy 有一个帮助程序类来创建通用类型,因此您无需自己创建实现。我将它放在单独的一行中以使其更明显。

    // Create List<Dummy> as Type
    Generic generic = TypeDescription.Generic.Builder
            .parameterizedType(List.class, Dummy.class).build();

    Class<? extends Example> loaded = new ByteBuddy().subclass(Example.class)
            .defineField("names", generic, Visibility.PRIVATE).make()
            .load(ByteBuddyEnhancer.class.getClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded();

验证字段实际设置并包含通用参数的一种方法是此测试用例

    Field field = loaded.getDeclaredField("names");
    Type fieldType = field.getGenericType();
    Assert.assertTrue(fieldType instanceof ParameterizedType);
    ParameterizedType genericFieldType = (ParameterizedType)fieldType;
    Assert.assertEquals(Dummy.class, genericFieldType.getActualTypeArguments()[0]);
    System.out.println(genericFieldType.getRawType());
    System.out.println(genericFieldType.getActualTypeArguments()[0]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ByteBuddy 定义泛型类型的字段 的相关文章

  • 在文本文件中写入多行(java)

    下面的代码是运行命令cmd并使用命令行的输出生成一个文本文件 下面的代码在 Eclipse 的输出窗口中显示了正确的信息 但在文本文件中只打印了最后一行 谁能帮我这个 import java io public class TextFile
  • 是什么决定了从 lambda 创建哪个函数式接口?

    请考虑这个例子 import java util function Consumer public class Example public static void main String args Example example new
  • Java:如何从转义的 URL 获取文件?

    我收到了一个定位本地文件的 URL 事实上我收到的 URL 不在我的控制范围内 URL 按照 RFC2396 中的定义进行有效转义 如何将其转换为 Java File 对象 有趣的是 URL getFile 方法返回一个字符串 而不是文件
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 欧洲中部时间 14 日 3 月 30 日星期五 00:00:00 至 日/月/年

    我尝试解析格式日期Fri Mar 30 00 00 00 CET 14至 日 月 年 这是我的代码 SimpleDateFormat formatter new SimpleDateFormat dd MM yyyy System out
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的

随机推荐

  • 如何根据 NA 与字母表对值进行分组

    我有一个专栏LETTER数据框中按字母顺序排列的值部分散布NA df1 lt data frame phase c NA A B D NA A B C E A B D The LETTER价值观形成群体 任何来自A until either
  • 如何禁止直接访问浏览器网址中的网站目录,但在网站内部请求时允许?

    我有 Apache Nginx 混合服务器设置 运行一个带有 php mysql 后端的网站 出于安全原因 我试图限制用户直接访问我网站的内部文件夹 目录 例如 css Js 和其他包含的 php 文件 例如 如果用户输入https myw
  • useLocation 钩子在启动时未定义:TypeError:无法读取未定义的属性“位置”

    我正在编写一个 Typescript React 应用程序 它将让用户登录并更新Dashboard组件来显示用户信息 例如他们的访问令牌和姓名 我正在使用useLocation钩子从 fetch 请求中传递状态LoginCallback组件
  • 从 Heroku 下载 sqlite 数据库

    我有一个工作人员每 2 小时在 Heroku 上运行一次 python 脚本 问题是每次我从 git 拉 更改时 没有任何变化sqlite3数据库 但通过查看日志文件 我确信程序正在运行并且数据库已更改 heroku log 那么如何检索
  • 没有函数体的函数签名

    当查看源码时math Ceil http golang org src pkg math floor go s 725 753 L26方法 我发现这个语法有一个没有主体的导出函数签名 以及包含实现的同一签名的非导出版本 Ceil retur
  • Typescript 中的“日期”类型不存在属性“getWeek”[重复]

    这个问题在这里已经有答案了 我正在尝试从给定的日期范围计算一周的开始日期和结束日期 下面的代码给了我这个错误 ts Property getWeek does not exist on type Date Date prototype ge
  • 将手机升级到 Android 9 Pie API 28 修订版 6 后,Cordova 应用程序中出现 Ajax 错误

    我有一个使用 Cordova 8 1 2 开发的应用程序 并在 Android 8 1 Oreo API Level 27 Revision 3 下编译 在 Play 商店和注册用户中成功运行 上周 一些用户将手机升级到 Android 9
  • 浏览器后退按钮不会破坏 PassportJS + ExpressJS 中的会话。如何完全终止/终止会话?

    我的注销机制的代码是 app get logout isLoggedIn function req res req logout res redirect 我使用的是带有密钥的 Express session 包 没有在任何地方设置 Coo
  • 阻塞时如何判断关联对象Id代表什么对象?

    我收到了另一个团队关于 SQL Server 中阻塞的报告 查看结果 Exec sp who2 以及来自 Glenn Berry 博客的查询 SELECT blocking session id AS blocking session id
  • 创建多维度交互图的工具推荐

    我了解 QLik Sense Big Query Google Data Studio 及相关 我需要创建一个包含多个点的地图 每个点将显示数据库中的数据 点相关 例如 该表将如下所示 Store Name Store Location L
  • MVC 读取控制器和操作的 url

    我为 php 编写了自己的 mvc 它似乎对我来说工作得很好 但我在获取控制器和操作时遇到问题 http www example com controller action http www example com controller a
  • 运行时禁用 datagridviewcombobox

    我如何更改以下内容DataGridViewComboBoxColumn在运行时 如何将组合框的第一个值设置为默认值 禁用组合框 使其只读 同时显示第一个值作为默认值 意思是说 如果组合框中有 3 个项目 它应该只显示第一个项目 禁用组合框下
  • 使用 jQuery 的日期掩码[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从命令行调用静态 jar 类方法

    我有一个 jar 文件 CallMeMaybe jar 主类 callmemaybe CallMeMaybe 中有一个静态方法 callMe 就像可以通过运行以下命令从命令行调用 main 方法 java cp CallMeMaybe ja
  • WPF ListViewItem 失去焦点事件 - 如何获取该事件?

    我有一个列表视图 您可以在其中选择行 项目 它链接到在行上显示图像的数据触发器 仅当选择该行时才应显示图像 这部分工作正常 但是当您将焦点移至其他内容 例如文本框 或显示消息框时 列表视图项目将失去焦点 即不再显示行上的突出显示 问题是我的
  • TabLayout 指示器定制

    i have been searching how to change the indicator in Tablayout to be circular like this 但我不知道该怎么做 请帮忙 来自源代码 https androi
  • 让 Textmate 识别 Ruby 版本升级

    我使用了以下说明http bparanj blogspot com 2010 06 installing ruby 191 on snow leopard html http bparanj blogspot com 2010 06 ins
  • 无法访问类“android.arch.core.util.Function”

    您好 我无法创建代码实现 错误如标题所示 Transformations switchMap mLiveData listOfDamages gt doSth or Transformations map liveData doSth 我无
  • 页面上的猫头鹰轮播和引导选项卡

    我正在尝试使用引导程序和猫头鹰轮播构建一个页面 猫头鹰轮播适合网站的目的 而不是引导版本 所以我有一个选项卡结构 我想在每个页面上放置一个轮播 但是我所有的尝试都失败了 这是我的代码 div ul class nav nav tabs li
  • 使用 ByteBuddy 定义泛型类型的字段

    我刚刚开始使用 ByteBuddy 并且正在研究几个示例以掌握它的窍门 我试图通过此练习完成的任务是用 ByteBuddy 替换一些使用 ASM 的代码 到目前为止 我在非泛型类型方面取得了成功 例如 我可以轻松定义一个字段 如下所示 bu