Java 反射:创建一个实现类

2023-12-01

Class someInterface = Class.fromName("some.package.SomeInterface");

我现在如何创建一个新类来实现someInterface?

我需要创建一个新类,并将其传递给需要的函数SomeInterface作为一个论点。


Easily, java.lang.reflect.Proxy来救援!

完整的工作示例:

interface IRobot {

    String Name();

    String Name(String title);

    void Talk();

    void Talk(String stuff);

    void Talk(int stuff);

    void Talk(String stuff, int more_stuff);

    void Talk(int stuff, int more_stuff);

    void Talk(int stuff, String more_stuff);
}

public class ProxyTest {
    public static void main(String args[]) {
        IRobot robot = (IRobot) java.lang.reflect.Proxy.newProxyInstance(
                IRobot.class.getClassLoader(),
                new java.lang.Class[] { IRobot.class },
                new java.lang.reflect.InvocationHandler() {

            @Override
            public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws java.lang.Throwable {
                String method_name = method.getName();
                Class<?>[] classes = method.getParameterTypes();

                if (method_name.equals("Name")) {
                    if (args == null) {
                        return "Mr IRobot";
                    } else {
                        return args[0] + " IRobot";
                    }
                } else if (method_name.equals("Talk")) {
                    switch (classes.length) {
                        case 0:
                            System.out.println("Hello");
                            break;
                        case 1:
                            if (classes[0] == int.class) {
                                System.out.println("Hi. Int: " + args[0]);
                            } else {
                                System.out.println("Hi. String: " + args[0]);
                            }
                            break;
                        case 2:
                            if (classes[0] == String.class) {
                                System.out.println("Hi. String: " + args[0] + ". Int: " + args[1]);
                            } else {
                                if (classes[1] == String.class) {
                                    System.out.println("Hi. int: " + args[0] + ". String: " + args[1]);
                                } else {
                                    System.out.println("Hi. int: " + args[0] + ". Int: " + args[1]);
                                }
                            }
                            break;
                    }
                }
                return null;
            }
        });

        System.out.println(robot.Name());
        System.out.println(robot.Name("Dr"));
        robot.Talk();
        robot.Talk("stuff");
        robot.Talk(100);
        robot.Talk("stuff", 200);
        robot.Talk(300, 400);
        robot.Talk(500, "stuff");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 反射:创建一个实现类 的相关文章

  • 在 Java 中将系统属性设置为 Null

    在我的单元测试中 我需要将 workingDir 系统属性设置为 Null 但我不能这样做 因为它给了我 NullPointerException System setProperty workingDir null 我该怎么做 您不能将属
  • spring boot框架下如何过滤tomcat产生的访问日志

    我们使用spring boot框架 通过嵌入式tomcat生成访问日志 访问日志的格式如下 server tomcat access log enabled true server tomcat access log pattern h l
  • 如何在 Spring Boot 1.4 中自定义 Jackson

    我一直无法找到如何使用的示例Jackson2ObjectMapperBuilderCustomizer java在spring boot 1 4中自定义Jackson的功能 boot 1 4 中自定义 Jackson 的 doco http
  • 使用 Java NIO 直接访问 Windows 磁盘

    我正在使用一个使用 Java NIO 的库来直接将文件映射到内存 但我在直接读取磁盘时遇到问题 I can直接使用读取磁盘FileInputStream与 UNC 合作 例如 File disk new File PhysicalDrive
  • 将图像缩略图上传到服务器,而不上传整个图像

    据我所知 我在这里问的是不可能的 但我想无论如何我都会问 以防我遗漏了什么 假设您想让用户上传 JPG 图像 并且这些图像被缩放为较小的图标 并且原始图像始终被丢弃并且不再需要 有没有什么方法可以在大多数现代浏览器中普遍使用 让用户选择硬盘
  • 在 Eclipse 中导航 Java 调用堆栈

    在调试器中像GDB http sources redhat com gdb 当您在断点处停止时 您可以轻松地向上移动调用堆栈并检查相关的源和堆栈帧数据 在 Eclipse 中如何做到这一点 In the 调试视角 http www ibm
  • 指定自定义应用程序上下文

    我们正在将一些数据服务从使用 jersey spring 的 Jersey 1 x 迁移到使用 jersey spring3 的 Jersey 2 x 我们有一些继承自 JerseyTest 的测试类 其中一些类使用 web xml 文件中
  • Maven:缺少工件 org.springframework:spring:jar:4.2.6

    我在 SpringToolSuite 中有一个动态 Web 项目 它被转换为 Maven 项目 我遇到问题 缺少工件 org springframework spring jar 4 2 6 我已经尝试清理 重建和运行该项目 它给 读取文件
  • Apache POI 的 ProGuard 设置

    我正在构建一个使用 Apache POI 库的应用程序 当我调试应用程序 在不运行 Proguard 的情况下编译它 时 一切都运行良好 但是在导出 APK 后 当我运行应用程序并打开 Excel 文件时 出现以下异常 RuntimeExc
  • 如何更改tomcat jmx密码的文件权限

    我正在尝试保护 Windows 平台上托管的本地 tomcat 实例上的 JMX 访问 我已经创建了访问权限和密码文件 并使用以下 VM 参数插入这些文件 Dcom sun management jmxremote password fil
  • Spark toLocalIterator 和迭代器方法之间的区别

    在编写 Spark 程序时我遇到了这个toLocalIterator 方法 之前我只使用iterator method 如果有人曾经使用过这种方法 请点亮 我在使用时遇到foreach and foreachPartitionSpark程序
  • 获取运行时生成的类的字节

    我正在使用一个 Java 框架 该框架使用自定义类加载器在运行时生成一些 代理 类 我想为任何这样的类获取自定义 ClassLoader 从 loadClass 返回的与该类对应的原始字节数组 这可能吗 我知道 如果一个类作为资源存在 那么
  • 使用JPanel绘制直线并获取点坐标

    我现在完全不知所措 我没有太多用 Java 构建 GUI 我一直在阅读有关 swing 和 JPanel 的所有内容 我认为我想做的事情是可能的 我只是还没有弄清楚how 我正在尝试构建一个 GUI 您可以在其中在某个绘图区域内绘制直线 我
  • Java 通用问题

    下面的代码可以编译 但如果我取消注释行 它不会编译 我很困惑为什么 HashMap 确实扩展了 AbstractMap 并且声明映射的第一行可以正常编译 import java util AbstractMap import java ut
  • 如何使用 Groovy 获取没有继承方法的类的所有方法名称?

    Question 如果没有继承的方法 如何获取类的所有方法的名称 Example def methods MyClass methods collect it name println methods each println it ass
  • 我可以从同一个 jar 文件执行两个不同的类吗?

    我有一个项目 在一个包中我制作了服务器 在第二个包中我制作了客户端 它运行良好 我想创建一个 Jar 文件 是否可以使用同一个 jar 文件分别运行客户端和服务器 我使用了只有一个 main 的 jar 文件 当我运行 jar 文件时 它会
  • 在 Java Web 应用程序中获取 DataSource 资源

    我的 context xml 文件中有以下资源标记
  • 使用 JPA 和 Hibernate 时 DISTINCT 如何工作

    DISTINCT 在 JPA 中使用什么列 是否可以更改它 以下是使用 DISTINCT 的 JPA 查询示例 select DISTINCT c from Customer c 这没有多大意义 不同的列是基于哪一列 它是否在实体上指定为注
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 在私有 guice 模块中公开 Map

    我在 guice 中有一个 PrivateModule 我想从该模块公开一个 Map public class TestInjectionModule extends PrivateModule expose Map class annoa

随机推荐

  • ANTLR - 输入错误不匹配

    我有一个语法 如下所示 由特定语言的注释和控制语句组成 Grammar grammar DD ddlist ddstmt jclcomment ddstmt dd1 dd2 dd3 dd4 dd1 JCLBEGIN ddname DDWOR
  • 如何将半圆蒙版应用于 ImageView

    我有一个图像 一个半圆形框架图像 我需要将该图像放入该框架内 但我需要对图像应用蒙版 以便它仅显示在框架内 例如 这是我的图像 而我想要的结果应该是这样的 红框也是内部透明的图像视图 我怎样才能在Android中实现这一点 有一个很棒的教程
  • YouTube 可以直接上传到所有用户的通用帐户吗?

    是否可以配置 YouTube Direct 以便将视频上传到一个中央帐户而不是单个用户的帐户 我们已经有了自己的身份验证流程 不希望客户登录我们的系统 然后登录 Google 上传视频 我们可以拥有自己的视频捕获系统 将视频录制到我们的服务
  • 将结果存入变量

    我有以下示例代码 我可以通过打印功能在控制台中看到正确的结果 Define a model for linear regression const model tf sequential model add tf layers dense
  • 谷歌日历 API 令牌将在 7 天后过期

    I used 本指南创建 Google 日历OAuth2客户端 ID 和客户端密钥 然后 我使用 gcalcli 命令创建 API 访问令牌 gcalcli noauth local webserver client id clientid
  • Firebase:限制同一电话号码或同一设备的短信数量

    我们正在尝试在我们的 Android 应用程序中实现 firebase 电话身份验证 如此处所述link 它在我们的应用程序中运行良好 服务器端验证也按预期工作 现在我们想为同一电话号码或同一设备添加每日短信数量限制 以防止滥用 链接引用
  • 使用 VADump 跟踪内存使用情况 - OpenProcess 失败 c0000034

    读完一篇最新一期 MSDN 杂志中的文章 我想尝试使用 VADump 来分解我编写的一些应用程序的内存使用情况 我的电脑上唯一的可执行文件副本位于 c Program Files Microsoft Visual Studio 8 Comm
  • 使用 jq 处理巨大的 GEOJson 文件

    给定一个 GEOJson 文件如下 type FeatureCollection features type Feature properties FEATCODE 15014 geometry type Polygon coordinat
  • Java 计算百分比的算术

    我的 java 应用程序有一个小问题 我必须计算他们完成后的分数 我使用这个方法 public Float ScoreProcent int questions int correct Float x new Float questions
  • Phantomjs 与 Facebook 的 SSL 握手失败 [重复]

    这个问题在这里已经有答案了 我正在尝试使用 phantomjs 为 Facebook 构建一个网络抓取工具 由于 SSL 握手失败 连接失败 我在 Twitter 上得到了相同的结果 但谷歌工作正常 有谁知道这个问题的解决方案 我正在运行
  • Jinja2 中的 zip(list1, list2) ?

    我正在 Jinja2 中进行代码生成 并且经常想一起迭代两个列表 即变量名称和类型 是否有一种简单的方法可以做到这一点 或者我是否需要传递一个预压缩列表 我在中找不到这样的功能docs或谷歌搜索 修改jinja2 Environment全局
  • Visual Studio 2012 中的 c++11 std::mutex 编译器错误

    这是一个关于 C 11 标准中死锁的探索 在 C Concurrency in Action 的 sec3 2 4 中 有一个示例 防止多线程死锁 对于没有这本书的人来说 另外 还有一个几乎类似的例子可以参考 http en cpprefe
  • 在 jupyter 笔记本中保留 pandas 数据框显示的额外空白

    在 jupyter Notebook 中 数据框中多余的空格被删除 但有时这不是首选 例如 df pd DataFrame A a b c B 1 2 df 我得到的结果 A B 0 a b 1 1 c 2 但我想要 A B 0 a b 1
  • 显然缺少 getline() 的重载,在 GCC 4.7.2 和 Clang 3.2 中将 RRef 传输到流

    我在尝试使用时遇到了意外的编译错误getline 使用临时流对象 include
  • mysqli 中的输出 Inserted.row

    我有以下sql表 ID 电子邮件 fbid 当我执行查询时 INSERT INTO users email fbid VALUES randomvalue otherrandomvalue 我想获取插入行的 id 为此 我尝试像这样编辑查询
  • NodeJS:智能 JSON 转换为 Excel 文件

    我正在使用 NodeJS 我想将 JSON 格式的对象导出到 Excel 文件 我很清楚有 至少 三个 npm 包用于此目的 但到目前为止 这些包都没有给我我梦想的输出 这是我的 javascript 对象 var myObject has
  • System.Text.Json.JsonSerializer.Deserialize() 的 .net 5.0 签名更改

    我正在尝试从 NET Core 3 1 到 NET 5 0 并在使用时收到一堆可空性警告Deserialize
  • java中从HTML中删除css信息

    是否有任何库或预先编写的代码可以从 HTML 代码中删除 css 属性 要求是 Java 代码必须解析输入的 html 文档 并删除 css 属性并生成输出 html 文档 例如 如果输入 html 文档具有此元素 p class abc
  • CasperJS/PhantomJS .then 在 do/while 循环中不起作用

    像这样的事情对我来说似乎很合乎逻辑 但导致幻像 wtfcrash 这就是它在日志中的名称 但没有提供有用的信息 do casper then function var targetFound false links this evaluat
  • Java 反射:创建一个实现类

    Class someInterface Class fromName some package SomeInterface 我现在如何创建一个新类来实现someInterface 我需要创建一个新类 并将其传递给需要的函数SomeInter