gpt4 book ai didi

java - 如何强制覆盖方法并同时调用 super

转载 作者:行者123 更新时间:2023-12-02 10:13:30 24 4
gpt4 key购买 nike

好吧,最近我想实现以下内容

public enum ObjectTypes {
STRING,
INTEGER
}

interface IObjectEnhancer{
void enhance(String s);
void enhance(Integer i);
ObjectTypes getLastEnhancedType();
}

class ObjectEnhancer implements IObjectEnhancer{
ObjectTypes lastUsedType=null;

@CallSuper
@Override
public void enhance(String s) {
this.lastUsedType=ObjectTypes.STRING;
}

@CallSuper
@Override
public void enhance(Integer i) {
this.lastUsedType=ObjectTypes.INTEGER;
}

@Override
final public ObjectTypes getLastEnhancedType() {
return lastUsedType;
}
}

class ObjectEnhancerChild extends ObjectEnhancer{
@Override
public void enhance(String s) {
super.enhance(s);
//child code
}

@Override
public void enhance(Integer i) {
super.enhance(i);
//child code
}
}

为了安全起见,我想添加 @CallSuper 因为我真的希望只有父级记住类型,但我也想要 enhance(String)增强(Integer)成为抽象,这样以后笨手笨脚的人(包括我)就不会忘记实际实现这些方法。

所以下面是一种处理这种情况的方法,显然只有我有这种情况,而互联网上并没有真正的建议,担心这么小的事情可能看起来很愚蠢,但如果你有 10 多种方法星星变成噩梦(欢迎反馈和其他解决方案):

最佳答案

只需创建新的 abstract 方法,以便子级方法强制实现它们,并且父级方法调用 abstract 方法,而不是使用 @CallSuper :

abstract class ObjectEnhancer implements IObjectEnhancer{ //add abstract to parent
ObjectTypes lastUsedType=null;

abstract void enhance2(String s); //new
abstract void enhance2(Integer i); //new

//removed @CallSuper
@Override
final public void enhance(String s) { //changed to final
this.lastUsedType=ObjectTypes.String;
enhance2(s); //new
}

//removed @CallSuper
@Override
final public void enhance(Integer i) { //changed to final
this.lastUsedType=ObjectTypes.Integer;
enhance2(i); //new
}

@Override
final public ObjectTypes getLastEnhancedType() {
return lastUsedType;
}
}

class ObjectEnhancerChild extends ObjectEnhancer{
@Override
public void enhance2(String s) { //changed to abstract method
//removed super.enhance(s);
//code
}

@Override
public void enhance2(Integer i) { //changed to abstract method
//removed super.enhance(i);
//code
}
}

关于java - 如何强制覆盖方法并同时调用 super,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54826222/

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