如何在java中检查(未经检查的)强制转换?

2023-11-26

我有以下问题:我想编写一个使用java反射的框架。我(从某处)获得一个类的名称,我想加载该类并创建一个实例。作为侧面约束,所有有效的类都属于一个公共超类。

为了保持简单和容易,我不会发布我所有的课程。相反,我编写了某种“MWE”(见下文)。

我该怎么办? 我首先定义一个String模拟要加载的类的名称。在我的应用程序中,我从 XML 文件中获取名称。 代表类必须是给定类的子类(这里File就我而言,我有一整棵不同类的树)。 我检查给定名称是否解析为子类的类。如果是的话我应该能够cast the Class<?>反对Class<File>目的。 不幸的是日食(因此javac) 给出编译警告。

在这种特殊情况下,可以忽略警告,我可以添加注释来抑制警告。好的。但通常java中有一个更干净的解决方案来解决此类问题。我还可以继续使用Class<?>并稍后在使用对象时强制转换类型(请参阅代码中的示例)。

import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class ReflectTest extends File
{
    private static final long serialVersionUID = 8807535438772463115L;
    public ReflectTest()
    {
        super("","");
    }

    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalArgumentException, InvocationTargetException, IllegalAccessException
    {
        String className = "ReflectTest";
        Class<?> clsGen = Class.forName(className);
        if(! File.class.isAssignableFrom(clsGen))
        {
            // Throw some error
            System.exit(1);
        }
        Class<File> cls = (Class<File>) clsGen;
        File f1 = cls.getConstructor().newInstance();
        //Constructor<?> constructor = clsGen.getConstructor();
        //File f2 = (File) constructor.newInstance();
    }
}

您可以使用Class.asSubclass():

Class<? extends File> cls = clsGen.asSubclass(File.class);
File f1 = cls.getConstructor().newInstance();

这是编译时安全的,因为它会抛出ClassCastException if clsGen并不是真正的子类File.

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

如何在java中检查(未经检查的)强制转换? 的相关文章

  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • JavaFX - setVisible 隐藏元素但不重新排列相邻节点

    在 JavaFX 中 如果我有一个场景有 2VBox元素和每个VBox有多个Label in it 如果我设置顶部VBox to 无形的 为什么底部VBox 不向上移动顶部的场景VBox was The VBox is 无形的但我希望其他物
  • Spring Stomp over Websocket:流式传输大文件

    我的SockJs客户端在网页中 发送帧大小为16K的消息 消息大小限制决定了我可以传输的文件的最大大小 以下是我在文档中找到的内容 Configure the maximum size for an incoming sub protoco
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • 使用 Guava 联合两个 ImmutableEnumSets

    我想联合两个ImmutableEnumSets来自番石榴 这是我的尝试 public final class OurColors public enum Colors RED GREEN BLUE YELLOW PINK BLACK pub
  • @EnableTransactionManagement 的范围是什么?

    我试图了解正确的放置位置 EnableTransactionManagement多个 JavaConfig 上下文的情况下的注释 考虑以下场景 我在 JPAConfig java 和 AppConfig java 中有 JPA 配置以及一组
  • Install4j:如何在安装结束时执行命令行 java -jar filename.jar

    在 Intall4j 中 在安装结束时 我只想通过执行如下命令行来初始化某些内容 java jar filename jar 我怎样才能归档这个任务install4j Thanks 将 运行可执行文件或批处理文件 操作添加到 安装屏幕 并设
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • Java 编码风格、局部变量与重复方法调用

    我更喜欢使用局部变量而不是多次调用同一方法 I prefer this Vehicle vehicle person getVehicle if vehicle instanceof Car Car car Car vehicle car

随机推荐

  • 开发在 android 中以 kiosk 模式运行的应用程序

    如何使我们的应用程序像信息亭模式应用程序一样 SureLock lockdown app 我有 LG E400 root 的 Android 手机 Android 2 3 6 我想开发像这样的应用程序Surelock我需要什么来开发这样的应
  • 记录访问器的语法默认值

    像我以前一样写下答案刚才 我遇到了一个有趣的问题 data Gender Male Female deriving Eq Show data Age Baby Child PreTeen Adult deriving Eq Show Ord
  • 在 Metro 中使用 NHibernate

    我正在将一个应用程序从 iOS 移植到 Win8 并希望在应用程序中使用 NHibernate 来存储关系数据 但是每当我添加NHibernate dll lesli Collections dll我收到以下错误 错误 2 在模块 msco
  • 有没有办法在spring4中禁用注释?

    我有一个问题 也许很简单 但我找不到解决方案 我正在使用 spring boot 并向代码添加一些注释 如下所示 EnableEurekaClient SpringBootApplication EnableCaching public c
  • 为什么析构函数比构造函数被调用更多? [复制]

    这个问题在这里已经有答案了 在以下代码中 析构函数被调用两次 而构造函数仅被调用一次 enum TFoo VAL1 VAL2 class CFoo public TFoo mf CFoo cout lt lt hi c tor1 n mf
  • 使用 android:process=":remote" 重新创建 android Application 对象

    我在我的应用程序中使用 AIDL 服务 我还想运行另一个进程 所以我使用android process remote 在清单中的服务声明中 我的问题是 当 remote进程启动它显然重新创建Application object 我真的不这样
  • 使用 jquery 获取 optgroup 中选择选项的索引

    我有以下选择
  • IntelliJ 社区版 JSP 语法高亮

    我刚刚下载了 IntelliJ 15 0 1 Community Edition 因为我厌倦了 Eclipse 而且它在我的笔记本电脑 Ubuntu 14 04 LTS 上看起来很糟糕 一切都进行得很顺利 直到我发现 JSP 文件中的语法突
  • 列表列表的所有组合[重复]

    这个问题在这里已经有答案了 我基本上是在寻找 python 版本的组合List
  • 告诉 git 永远不要更新文件

    我在 git 中有一些文件 即配置文件 我需要将它们放在 git 存储库中 但我不希望它们更新 出于某种原因 运行它们 然后更改配置文件 那么有什么方法可以告诉 git 忽略对文件的任何更改 但将原始文件保留在存储库中吗 目前 我发现执行此
  • 如何识别 Google OAuth2 用户?

    我使用 Facebook 登录来识别用户 当新用户到来时 我将他们的用户 ID 存储在我的数据库中 下次他们来的时候 我认出了他们的 Facebook ID 并且知道我的数据库中是哪个用户 现在我尝试用 Google 的 OAuth2 做同
  • 从 QChar 检索 Unicode 代码点 > U+FFFF

    我有一个应用程序应该处理各种字符并在某些时候显示有关它们的信息 我在 QChar QString 等中使用 Qt 及其固有的 Unicode 支持 现在我需要 QChar 的代码点来查找一些数据http unicode org Public
  • 使用 django 并扭曲在一起

    1 我想开发一个有论坛和聊天的网站 聊天和论坛以某种方式链接 对于每个线程来说 用户可以在该线程的聊天室中聊天 或者可以在论坛上发表回复 我正在考虑使用 django 进行论坛 并使用twisted 进行聊天 我可以将两者结合起来吗 使用t
  • 我应该使用哪种 X-UA 兼容模式?

    我一直在阅读有关在网页上使用文档兼容性元标记的主题 我有点困惑哪个内容值适合 用于 xhtml 过渡文档类型的共识 然后逐步使用 HTML5 文档类型 我们仍然支持 IE6 IE7 所以 IE EmulateIE8 是最合适的 有人可以帮忙
  • 手机锁定时 Android 服务停止工作

    我有一个启动服务的应用程序 该服务有一个计时器 每 30 秒弹出一次通知 我注意到以下行为 如果屏幕在屏幕上 则通知显示正常 即使应用程序在后台 如果屏幕关闭 通过电源按钮或本身关闭 则不会显示通知 如果屏幕关闭但我正在运行调试 则会出现通
  • Android:如何在启动屏幕上对齐 2 个图像

    我想使用包含 2 个图像的启动屏幕 主图像必须完全居中 次要图像必须位于底部和主图像之间的中心 The expected render is something like this But I don t see how to get th
  • Python结构模式匹配

    我无法运行此代码 match shape case Point x y case Rectangle x y print x y 我找不到matchPython 中的关键字 我在这里找到了它 https www python org dev
  • Angular 2:不改变 URL 的路由

    如何在 Angular 2 应用程序中进行路由而不更改 URL 这是因为该应用程序位于 Django 应用程序页面上的几个选项卡之一下 适合将 URL 保持不变 目前我里面有这样的东西app component ts RouteConfig
  • 有没有办法直接在 Jupyter 单元中调用 wait ?

    我见过此类代码在某些环境中工作的示例 例如https github com ipython ipykernel pull 323 但对我来说这只会提高SyntaxError so far Update 我知道在 纯 Python 中它不起作
  • 如何在java中检查(未经检查的)强制转换?

    我有以下问题 我想编写一个使用java反射的框架 我 从某处 获得一个类的名称 我想加载该类并创建一个实例 作为侧面约束 所有有效的类都属于一个公共超类 为了保持简单和容易 我不会发布我所有的课程 相反 我编写了某种 MWE 见下文 我该怎