接口上的Java实例
我有以下处理命令行选项的代码: 我有以下课程:接口上的Java实例,java,interface,Java,Interface,我有以下处理命令行选项的代码: 我有以下课程: public enum DwelltimeOptions implements IDwelltimeOptions{ public DwelltimeOptions findOption(String s){ return null; } } public interface IDwelltimeOptions extends IOptions{ public void co
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);
}
问题是我下面的第一个选项变量似乎不是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);
}
第一个选项变量是“class com.nim.tools.options.delaytimeoptions”,而delaytimeoptions类实现了IDwelltimeOptions,它扩展了IOptions…所以delaytimeoptions应该是IOptions的一个实例
事实上,我想我刚刚意识到这个问题。firstOption变量实际上是一个类对象,不能在instanceof上下文中使用,也不能与诸如IOOptions之类的接口进行比较?返回类的实例,因此在此代码中:
firstOption = Class.forName("com.nim.tools.options." + capitalize(args.get(0)) + "Options");
如果您在args.get(0)
中传递的参数是I
,并且您有IOptions
,那么firstOption
与Class
相同,而不是实现IOption
接口的对象实例
firstOption变量实际上是一个类对象,不能在instanceof上下文中使用,也不能与诸如IOptions之类的接口进行比较
是的,您的假设是正确的。返回类的实例,因此在此代码中:
firstOption = Class.forName("com.nim.tools.options." + capitalize(args.get(0)) + "Options");
如果您在args.get(0)
中传递的参数是I
,并且您有IOptions
,那么firstOption
与Class
相同,而不是实现IOption
接口的对象实例
firstOption变量实际上是一个类对象,不能在instanceof上下文中使用,也不能与诸如IOptions之类的接口进行比较
是的,您的假设是正确的。返回类的实例,因此在此代码中:
firstOption = Class.forName("com.nim.tools.options." + capitalize(args.get(0)) + "Options");
如果您在args.get(0)
中传递的参数是I
,并且您有IOptions
,那么firstOption
与Class
相同,而不是实现IOption
接口的对象实例
firstOption变量实际上是一个类对象,不能在instanceof上下文中使用,也不能与诸如IOptions之类的接口进行比较
是的,您的假设是正确的。返回类的实例,因此在此代码中:
firstOption = Class.forName("com.nim.tools.options." + capitalize(args.get(0)) + "Options");
如果您在args.get(0)
中传递的参数是I
,并且您有IOptions
,那么firstOption
与Class
相同,而不是实现IOption
接口的对象实例
firstOption变量实际上是一个类对象,不能在instanceof上下文中使用,也不能与诸如IOptions之类的接口进行比较
是的,您的假设是正确的。是的,返回表示类的对象,而不是类的实例。因此,对于类
(和对象
),只有instanceof
将返回true
。如果您想知道该类是否实现了接口(或超类),并且您拥有相关的类对象,那么您可以使用
确定此类对象表示的类或接口是否与指定的类参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回true;否则返回false
是,返回表示类的对象,而不是类的实例。因此,对于类
(和对象
),只有instanceof
将返回true
。如果您想知道该类是否实现了接口(或超类),并且您拥有相关的类对象,那么您可以使用
确定此类对象表示的类或接口是否与指定的类参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回true;否则返回false
是,返回表示类的对象,而不是类的实例。因此,对于类
(和对象
),只有instanceof
将返回true
。如果您想知道该类是否实现了接口(或超类),并且您拥有相关的类对象,那么您可以使用
确定此类对象表示的类或接口是否与指定的类参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回true;否则返回false
是,返回表示类的对象,而不是类的实例。因此,对于类
(和对象
),只有instanceof
将返回true
。如果您想知道该类是否实现了接口(或超类),并且您拥有相关的类对象,那么您可以使用
确定此类对象表示的类或接口是否与指定的类参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回true;否则返回false
对Class.forName
返回一个Class
对象。好的,您需要使firstOption=Class.forName(“yada-yada”).newInstance()
如果你想用实例检查它,那么@azurefrogIOption
是一个接口,所以你不能用这种方法创建一个新的实例。但是他不是为IOption
获取类,而是为实现该接口的驻留时间选项
获取类。你不能新建一个枚举实例吗?@azurefrog哦,没有读到问题的那部分。没错Class.forName
返回一个Class
对象。对,