gpt4 book ai didi

接口(interface)上的 Java 实例

转载 作者:行者123 更新时间:2023-12-01 22:54:20 25 4
gpt4 key购买 nike

我有以下处理命令行选项的代码:

我有这些类(class):

public enum DwelltimeOptions implements IDwelltimeOptions{

public DwelltimeOptions findOption(String s){
return null;
}
}

public interface IDwelltimeOptions extends IOptions{

public void compare(ReconToolCompare rtc) throws ReconToolException;

}
public interface IOptions {

public IOptions findOption(String s);

}

问题是下面我的firstOption变量似乎不是IOptions的实例,尽管我相信它应该是。

Object firstOption = null;
try {
firstOption = Class.forName("com.nim.tools.options." + capitalize(args.get(0)) + "Options");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

if(firstOption instanceof IOptions){
secondOption = ((IOptions) firstOption).findOption(args.get(1).substring(1));
}
else{
ReconTool.logError("Unrecognized option: \"" + args.get(0) + "\"");
ReconTool.printOutOptions();
System.exit(0);
}

firstOption 变量是“class com.nim.tools.options.DwelltimeOptions”,并且 DwelltimeOptions 类实现了扩展 IOptions 的 IDwelltimeOptions...因此 DwelltimeOptions 应该是 IOptions 的实例。

实际上,我想我刚刚意识到了这个问题。 firstOption变量实际上是一个Class对象,不能在instanceof上下文中使用,也不能与IOptions等接口(interface)进行比较?

最佳答案

Class#forName 返回 Class<?> 的实例,所以在这段代码中:

firstOption = Class.forName("com.nim.tools.options."  + capitalize(args.get(0)) + "Options");

如果您传入的参数 args.get(0)I你有IOptions ,然后firstOptionClass<IOption> 相同而不是实现 IOption 的对象的实例界面。

firstOption variable is actually a Class object and can't be used in an instanceof context and can't be compared with an Interface such as IOptions

是的,你的假设是正确的。

关于接口(interface)上的 Java 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24315704/

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