gpt4 book ai didi

java - 在公共(public)抽象方法的所有子类中提取公共(public)实现的最佳方法

转载 作者:行者123 更新时间:2023-12-02 11:28:31 27 4
gpt4 key购买 nike

我有一个抽象类,不幸的是我无法更改它的定义,它基本上提供了一个抽象方法,有点像。

public abstract void do(Data someData, BaseInterface interface);

现在,每个类都需要实现这个抽象方法,有点像。

public void do(Data someData, BaseInterface interface) {
CastTheBaseInterface obj = (CastTheBaseInterface) interface;
obj.exec(someData);
}

现在,我可以对接口(interface)进行强制转换,但我必须大量扩展这个抽象类,并且必须每次都进行强制转换,而强制转换将在同一个实现上完成,即 CastTheBaseInterface。我正在考虑在我的类和 super 抽象之间引入另一层并解决问题。但想不出解决办法。我的观点只是,如果我事先知道接口(interface)将被转换到哪个实现,为什么要一次又一次地这样做。

最佳答案

以下是针对只有一个实现可以转换的情况的解决方案:

public class YourNewAbstractClass extends LegacyAbstractClass {
@Override
public void do(Data someData, BaseInterface interface) {
CastTheBaseInterface obj = (CastTheBaseInterface) interface;
doCasted(someData, obj );
}

public abstract doCasted(Data someData, CastTheBaseInterface interface)
}

那么你的子类将如下所示:

public class ChildClass extends YourNewAbstractClass {
@Override
public void doCasted(Data someData, CastTheBaseInterface casted) {
casted.exec(someData);
}
}

如果您有更多实现,您可以使用黑暗魔法,这意味着将泛型与动态转换结合使用:

public class YourNewAbstractClass<T extends BaseInterface> extends LegacyAbstractClass {
@Override
public void do(Data someData, BaseInterface interface) {
// getting the generic parameter that you will define in a subclass
Class<T> clazz = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
// dynamically casting your object to a generic type
T casted = clazz.cast(something);
doCasted(someData, casted);
}

public abstract doCasted(Data someData, T casted)
}

那么你的子类将如下所示:

public class ChildClassOne extends YourNewAbstractClass<CastTheBaseInterface> {
@Override
public void doCasted(Data someData, CastTheBaseInterface casted) {
casted.exec(someData);
}
}

public class ChildClassTwo extends YourNewAbstractClass<AnotherCastTheBaseInterface> {
@Override
public void doCasted(Data someData, AnotherCastTheBaseInterfacecasted) {
casted.doSomeOtherStuff(someData);
}
}

希望这有帮助!

关于java - 在公共(public)抽象方法的所有子类中提取公共(public)实现的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49456898/

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