[英]java calling method before super
假設我有一個超類,它的構造函數中有3個參數,我繼承了這個類,它還有一個帶有3個參數的構造函數,我想調用超類構造函數,但之前我想在子類上做一些邏輯,我可以調用一個接收這3個參數的靜態方法,但我只需返回一個,所以這就是我提出的解決方案
public class someClass extends SuperClass {
public someClass(int a,int b,int c) {
super(func(a,b,c),b,c);
}
public static int func(int a,int b,int c){
//usage a b c
return a;
}
}
它似乎有點難看,我想知道是否有更好的解決方案自己使用參數然后定期調用超級。 請注意,我無法更改超類或子類的用法,因此無法更改工廠設計模式
要從構造函數中獲取邏輯,可以在子類中輕松創建工廠方法:
public class SomeClass extends SuperClass {
private SomeClass(int a, int b, int c) {
super(a, b ,c);
}
public static SomeClass create(int a, int b, int c){
// calculate a for constructor
return new SomeClass(a, b, c);
}
}
然后您可以按如下方式創建實例:
SomeClass someClass = SomeClass.create(1, 2, 3);
在Java中,在調用super
之前不允許執行另一個語句。 你提到的技巧有效,但你不能重構你的代碼,以便在調用super
之前在語句中調用func
。
根據我的經驗,這樣的問題經常暗示一些設計問題。 也許你可以通過重新思考這兩個相關類的責任來解決潛在的問題。
您還可以使用構建器模式
public class SomeClass extends SuperClass {
public static class Builder {
private int a, b, c;
public Builder withA(int a) {
this.a = a;
return this;
}
public Builder withB(int b) { ... }
public Builder withC(int c) { ... }
public SomeClass build() {
// logic goes here
return new SomeClass(...)
}
}
// hide this from public use, use Builder instead
protected SomeClass(int a, int b, int, c) {
super(a, b, c);
}
}
SomeClass someClass = new SomeClass.Builder().
withA(1).
withB(2).
withC(3).
build();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.