根据 class 不带 instanceof 区分代码块
Differentiate blocks of code based on class without instanceof
所以我有以下接口 I
由 classes A
和 B
实现:
interface I { ... }
class A implements I { ... }
class B implements I { ... }
然后我有另一个接口 OverrideMe
,其方法有一个对象 I
作为参数,还有一个 class 覆盖该方法并根据实际 class 该参数:
interface OverrideMe {
void method(I parameter)
}
class Overriding implements OverrideMe {
@Override
void method(I parameter) {
if (I instanceof A) {
// Code block for A
}
else if (I instanceof B) {
// Code block for B
}
}
}
有没有办法在不使用 instanceof
的情况下按类型区分这两个代码块?我不确定这是否可以使用继承来完成。
请记住,我无法控制 I
、A
、B
并且,我必须按原样使用它们。
是的,你可以根据你想在代码块中做什么。如果您正在寻找在 A 或 B 的实例上操作一些 b 逻辑。您可以在接口 I 内提供方法声明,并在 class A 和 B 内提供实现。示例,
interface I {
void doSomething();
}
class A implements I {
void doSomething(){
//do something here
}
}
class B implements I {
void doSomething(){
//do something here
}
}
interface OverrideMe {
void method(I parameter)
}
class Overriding implements OverrideMe {
@Override
void method(I parameter) {
parameter.doSomething();
}
}
如果不是上述情况,您可能需要使用 instanceof
所以我有以下接口 I
由 classes A
和 B
实现:
interface I { ... }
class A implements I { ... }
class B implements I { ... }
然后我有另一个接口 OverrideMe
,其方法有一个对象 I
作为参数,还有一个 class 覆盖该方法并根据实际 class 该参数:
interface OverrideMe {
void method(I parameter)
}
class Overriding implements OverrideMe {
@Override
void method(I parameter) {
if (I instanceof A) {
// Code block for A
}
else if (I instanceof B) {
// Code block for B
}
}
}
有没有办法在不使用 instanceof
的情况下按类型区分这两个代码块?我不确定这是否可以使用继承来完成。
请记住,我无法控制 I
、A
、B
并且,我必须按原样使用它们。
是的,你可以根据你想在代码块中做什么。如果您正在寻找在 A 或 B 的实例上操作一些 b 逻辑。您可以在接口 I 内提供方法声明,并在 class A 和 B 内提供实现。示例,
interface I {
void doSomething();
}
class A implements I {
void doSomething(){
//do something here
}
}
class B implements I {
void doSomething(){
//do something here
}
}
interface OverrideMe {
void method(I parameter)
}
class Overriding implements OverrideMe {
@Override
void method(I parameter) {
parameter.doSomething();
}
}
如果不是上述情况,您可能需要使用 instanceof