类型带反射的文字注入

2023-11-22

上下文:java使用guice(最后版本)

大家好,是否可以通过这种方式用 Guice 注入一些 TypeLiteral :

public MyClass<?,?> getMyClass(Injector injector, Class<?> a, Class<?> b)
{
     //how to Inject MyClass with type a & b ?
     //e.g : injector.getInstance(MyClass<"a class","b class">)
}

public interface MyClass<S,T>
{
     public T do(S s);
}

public class ClassOne implements MyClass<String,Integer>
{
     public Integer do(String s)
     {
          //do something
     }
}

Module :
bind.(new TypeLiteral<MyClass<String,Integer>(){}).to(ClassOne.class);
bind.(new TypeLiteral<MyClass<String,Double>(){}).to(ClassTwo.class);
...

处理这个问题的最佳方法是什么(使用 Guice)?

谢谢 !


为您的类型创建参数化类型:

// It's supposed to be internal.
// You could use sun.reflect.generics.reflectiveObjects but it is not portable.
// Or you can implement it yourself (see below)
ParameterizedType type = new com.google.inject.internal.MoreTypes.ParameterizedTypeImpl(null, MyClass.class, a, b);

从它创建一个 TypeLiteral:

TypeLiteral typeLiteral = TypeLiteral.get(type);

现在创建注入实例:

return (MyClass<A,B>) injector.getInstance(Key.get(typeLiteral))

在实践中,您想自己实现参数化类型:

 final Type[] types = {a, b};
 ParameterizedType type = ParameterizedType() {
   @Override
   public Type[] getActualTypeArguments() {
     return types;
   }

   @Override
   public Type getOwnerType() {
     return null;
   }

   @Override
   public Type getRawType() {
     return MyClass.class;
   };
}

编辑:事实上,您可以使用:

Types.newParameterizedType(MyClass.class,a,b)

see 带有类型参数的 Guice 模块

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

类型带反射的文字注入 的相关文章

随机推荐

  • Blazor wasm 中的定期后台任务

    在 Blazor wasm 中 我想定期执行一项作业 代码 即使用户正在浏览页面 例如每 x 分钟 那可能吗 什么是实用的方法 创建一个服务来管理计时器 public class JobExecutedEventArgs EventArgs
  • 按元素检查字符串是否存在

    我正在寻找一种方法来检查一个字符串是否可以在另一个字符串中找到 str contains仅采用固定字符串模式作为参数 我宁愿在两个字符串列之间进行按元素比较 import pandas as pd df pd DataFrame long
  • GDB 远程调试错误

    我尝试在 x86 64 suse linux 上远程调试 32 位应用程序 但收到此 远程寄存器格式错误 错误 我启动 gdbserver 监听端口 12345 gdbserver localhost 12345 my prog 这是错误
  • 在 pip install 上运行 Makefile

    我有一些协议缓冲区定义 需要将其构建为 Python 源代码 作为pip install过程 我已经子类化了setuptools command install命令输入setup py但我认为它试图在安装包后运行 Makefile 因此无法
  • Quasar框架q-select在v-model中设置一个对象比id

    我有以下代码供我选择
  • 有没有办法知道有人是否为您的网站添加了书签? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想为我的网站进行统计 我想做的一件事是知道有多少人为我的网站添加了书签 在没有调查的情况下做到这一点的最佳方法是什么 没有办法说清楚 一部分未发送引荐来源信息就到达该页面的人会为其
  • 如何通过数据库绑定将选项“全部”添加到 WPF 中的组合框

    我有以下内容ComboBox在 WPF 中 我知道我可以添加选项ALL与 CompositeCollection 但我不知道如何 如果有人帮助我提供一个简短的教程 那就太好了
  • Spring:hibernate + ehcache

    我正在使用 hibernate 处理一个 spring 项目 并希望使用 ehcache 实现二级缓存 我看到了很多解决这个问题的方法 spring modules cache其中介绍了 Cacheable注解 ehcache spring
  • 如何以编程方式找出哪些频道属于给定 YouTube 网络?

    似乎没有官方的 YouTube API 来查找 YouTube 网络列表或哪些频道属于给定网络 有什么想法如何找到该信息吗 如果没有直接的方法 socialblade com 使用什么算法获得近似列表 我不知道这是否是像socialblad
  • 对 CUDA 内核中不同部分进行计时

    我有一个 CUDA 内核 可以调用一系列设备函数 获取每个设备功能的执行时间的最佳方法是什么 获取设备函数之一中一段代码的执行时间的最佳方法是什么 在我自己的代码中 我使用clock 函数以获得精确的计时 为了方便起见 我有宏 enum t
  • 从推送通知启动时,launchOptions 始终为零

    我正在从 Django 应用程序发送推送通知 使用django 推送通知 到 iOS 应用程序 该应用程序面向 iOS 13 我在运行 iOS 13 3 1 的 iPhone 7 上运行它 我正在 Xcode 11 3 1 中调试 我正在尝
  • Numpy 的特征值/向量不正确

    我试图找到以下矩阵的特征值 向量 A np array 1 0 0 0 1 0 1 1 0 使用代码 from numpy import linalg as LA e vals e vecs LA eig A 我得到这个作为答案 print
  • 正确使用SQL Server中的事务

    我有 2 个命令 需要两个命令都正确执行 否则都不执行 所以我认为我需要一个交易 但我不知道如何正确使用它 下面的脚本有什么问题 BEGIN TRANSACTION Tran1 INSERT INTO Test dbo T1 Title A
  • 如何在 GitHub 上搜索提交消息?

    Not 在 Git 存储库中 而是在GitHub具体来说 如何仅搜索特定存储库 分支的提交消息 您过去可以执行此操作 但 GitHub 在 2013 年中期的某个时候删除了此功能 要在本地实现此目的 您可以执行以下操作 git log g
  • 实现多个通用接口 - 类型错误

    我正在尝试做这样的事情 public interface IRepository
  • Jquery过滤列表不区分大小写

    我想过滤列表而不区分大小写 我只想匹配不匹配大写或小写的字符 XXXXXXX yyyyyyy XXxxx 如果我在搜索框中输入 X 它会同时显示 1 和 3 我添加了下面的代码 但它也区分大小写
  • bash 计算文件中单词的出现次数

    我很抱歉问了这个非常菜鸟的问题 但我还是个新手bash编程 几天前开始 基本上我想要做的是将一个文件与另一个文件中出现的所有单词一起保存 我知道我可以这样做 sort uniq c sort 问题是 之后我想获取第二个文件 再次计算出现次数
  • 使用 std::launder 从指向非活动对象的指针获取指向活动对象成员的指针?

    This question followes this one 让我们考虑一下这个示例代码 struct sso union struct char ptr char size r 8 large str char short str 16
  • R 中按最后一个空格分割字符串

    我有一个向量 其中有多个空格的字符串 我想将其分成两个向量 并按最后的空格分开 例如 vec lt c This is one And another And one more again 应该成为 vec1 c This is And A
  • 类型带反射的文字注入

    上下文 java使用guice 最后版本 大家好 是否可以通过这种方式用 Guice 注入一些 TypeLiteral public MyClass a Class