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

时间:2014-04-18 12:58:52

标签: java generics

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

为了简单易行,我不发布所有课程。相反,我编写了一些" MWE" (见下文)。

我该怎么办? 我首先定义一个String来模拟要加载的类的名称。在我的应用程序中,我从XML文件中获取名称。 表示类必须是给定类的子类(在我的情况下,File我有一整个单独的类树)。 我检查给定的名称是否解析为一个子类。如果是,我应该将<{1}}对象转换为Class<?>对象。 不幸的是,eclipse(以及Class<File>)给出了编译警告。

在这种特殊情况下,可以忽略警告,我可以添加注释来抑制警告。行。但通常在java中有一个更清晰的解决方案来解决这些问题。我还可以继续使用javac并在使用对象时再次使用该类型(请参阅代码中的示例)。

Class<?>

1 个答案:

答案 0 :(得分:4)

您可以使用Class.asSubclass()

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

这是编译时安全的,因为如果ClassCastException实际上不是clsGen的子类,它将抛出File