gpt4 book ai didi

java - 从父类类型字段访问子类方法

转载 作者:行者123 更新时间:2023-12-01 08:48:51 25 4
gpt4 key购买 nike

考虑这些伪造的类:

A.java

public class A {
//
// implementation...
//
}

B.java

public class B extends A {
private Long id;

public Long getId() {
return id;
};

//
// B specific implementation...
//
}

C.java

public class C extends A {
private Long id;

public Long getId() {
return id;
};

//
// C specific implementation...
//
}

D.java

public class D extends A {
private Long id;

public Long getId() {
return id;
};

//
// D specific implementation...
//
}

E.java

public class E extends A {
//
// E specific implementation...
//
}

考虑这样一种情况,您无法更改这些实现,并且您有一个字段 A a,它将保存 BC 类型的对象> 或 D 并且当然不会出现 a 持有 AE 类型的对象的情况。

从视觉上来说,是否有比以下更简洁的方法来访问方法 getId():

if (B.class.isInstance(a)) {
return (Long) ((B) event).getId();
} else if (C.class.isInstance(a)) {
return (Long) ((C) event).getId();
} else {
return (Long) ((D) event).getId();
}

我知道这是不可能的,但是像这样:

public class X extends B, C, D {
public Long getId() {
return super.getId();
}
}

最佳答案

我会在这里使用一些界面:

interface HasId { 
Long getId();
}

以及一些实现它的自定义 B、C、D 等:

class YourB extends B implements HasId {
// nothing
}

class YourC extends C implements HasId {
// nothing
}

// ...

那么有问题的 if 就变成了

if (a instanceof HasId) { 
return ((HasId) a).getId();
}

关于java - 从父类类型字段访问子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42514787/

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