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

时间:2019-02-22 11:35:11

标签: java

好的,所以最近我想实现以下

decimalplaces_vec <- function(x) {

  vector <- c()
  for (i in 1:length(x)){

    if(!is.na(as.numeric(x[i]))){

      if ((as.numeric(x[i]) %% 1) != 0) {
        vector <- c(vector, nchar(strsplit(sub('0+$', '', as.character(x[i])), ".", fixed=TRUE)[[1]][[2]]))


      }else{
        vector <- c(vector, 0)
      }
    }else{
      vector <- c(vector, NA)
    }
  }
  return(max(vector))
}

为了安全起见,我想添加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 } } ,因为我真的只希望父母记住类型,但我也希望@CallSuperenhance(String)enhance(Integer),所以没有笨拙的未来人(包括我在内)会忘记实际实现这些方法。

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

1 个答案:

答案 0 :(得分:1)

只需创建新的abstract方法,以使子级被强制实现,而父级方法将调用abstract方法,而不是使用abstract

@CallSuper