gpt4 book ai didi

java - 将 isAssignableFrom() 与通用接口(interface)一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:49 25 4
gpt4 key购买 nike

我试图找到一种方法,但我没有找到,如果我的问题已经被问到,请告诉我。

基本上我有一个通用接口(interface)Evaluator<E, T>使用单一方法 E evaluate(T a, T b)这将由很多类实现(每个 Evaluator 实现对应一个特定的算法)。使用这些评估器的类使用一个 XML 配置文件,该文件指示哪个 Evaluator要使用的类。获得 Evaluator根据给定的类名,我决定设置一个 EvaluatorProvider从给定的类名构建求值器的类。

这个方法也是通用的:

public static <E, T> Evaluator<E, T> newInstance(String className)

我想确保为此名称找到的类是 Evaluator 的有效子类使用 isAssignableFrom() :

    Evaluator<E, T> evaluatorInstance = null;
try {
Class<?> evaluatorClass = Class.forName(className);
if (!Evaluator.class.isAssignableFrom(evaluatorClass)) {

}
evaluatorInstance = (Evaluator<E, T>) evaluatorClass.newInstance();
}
// Catch clause, etc ...

但它给了我一个关于未经检查的转换的警告,我想知道如何考虑为类检查提供的通用类型(使用 isAssignableFrom() 或任何其他有效的 java 机制)。

希望它是清楚的:)。

PS:如果您对解决方案设计有其他建议,请告诉我,我很好奇在 Java 中建模此类系统的最佳方法,而不是在 ServiceProvider 模式中运行,这对于项目需要来说太大了。

最佳答案

泛型是一种编译时检查,在运行时没有意义。为只有编译器认可的东西添加运行时检查没有意义。

关于java - 将 isAssignableFrom() 与通用接口(interface)一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18925559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com