这是我的简短示例。超类:
public abstract class SuperClass
{
public SubClass getSubClass()
{
return null;
}
}
SubClass扩展SuperClass:
public class SubClass extends SuperClass
{
public SubClass getSubClass()
{
return this;
}
public static void doSomething(SuperClass instance)
{
if(instance instanceof SubClass)
{
//Option 1:
SubClass example1 = instance.getSubClass();
//Option 2:
SubClass example2 = (SubClass)instance;
}
}
}
我的问题是,什么是最好的(并且没有任何警告)获得SubClass的方式?
在选项1中,我将得到2个警告(1.在SuperClass#getSubClass中,Class引用Subclass,2。在SubClass#getSubClass中它忽略了SuperClass中的方法)。
在选项2中,我会得到1个警告(投射到具体类),我相信选项也会变慢。
还有其他方法可以实现我想要的吗?哪个选项最好?
答案 0 :(得分:0)
执行此操作的常用方法是通过instanceof
运算符,但目前使用它的方式不会添加任何内容(instance
必须为instanceof
{{1因为它是声明它时的类型。
SuperClass
这不应该给你任何编译器警告。