gpt4 book ai didi

java - 检查调用对象是否是子类的实例

转载 作者:搜寻专家 更新时间:2023-11-01 01:14:28 25 4
gpt4 key购买 nike

我有 2 个类(class)。我们称它们为 A 类和 B 类。A 类包含一个执行某些操作的方法。 B 类用它自己的版本覆盖了这个方法,但确实生成了一个 super调用类 A 中的该方法来执行操作。现在,这工作正常。但是,A 类中的某些操作只有在对象 是 A 类的实例时才应执行。换句话说,如果对象是 A 类的实例,A 类方法中的某些操作不应发生A 类的子实例。

目前,我正在使用 instanceof检查每个 child ,但我需要指定每个子类,因此如果以后添加新的 child ,则需要更新此方法。我想要的是一种确定对象是否为子类的动态方法。

有没有好的替代品,或者是instanceof怎么走?

public class A{

public void someMethod(){

// Only perform these actions if it is not a child class. This is what
// I am looking for a better solution for
if(!(this instanceof B)){
// Some action...
}

// Actions to execute for every call
}
}

public class B extends A{

@Override
public void someMethod(){

super.someMethod();

// More actions
}
}

作为对设计的解释,我正在使用它来生成 XML。在程序中,我有一个 List<A>来存储数据。当需要输出 XML 时,我遍历列表并调用 generateXML (someMethod 在我的示例中占据了它的位置)。

创建类 A 的对象时,它的数据需要在 <A></A> 内标签。创建 B 类对象时,它的数据需要在 <B></B> 内标签。但是 A 的所有属性也必须在 <B></B> 内标签,所以现在它调用相同的 generateXML当对象仅属于类 A 时使用的方法

但正如其他一些人所指出的那样,调用相同的方法并不是可行的方法。类 B应该在类 A 中调用 protected 方法只生成必要的信息。

最佳答案

创建 protected 方法来执行类特定的事情,并从 someMethod() 调用它们。 A 类将提供其实现,如果子类需要有效地删除该代码,则它可以使用空实现覆盖 protected 方法。

不要对抗多态性;充分利用它。

例子:

public class A {
protected void someOtherMethod() {
// Do stuff specific to A here.
}

public void someMethod() {
// Do some stuff

someOtherMethod();

// Do some more stuff
}
}

public class B extends A {
@Override
protected void someOtherMethod() {
// Empty implementation; B doesn't need to do this.
// Or do stuff specific to B...
}
}

关于java - 检查调用对象是否是子类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6795442/

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