java 在super之前调用方法
java calling method before super
假设我有一个超级 class,它的构造函数中有 3 个参数,我正在继承这个 class,它也有一个带有 3 个参数的构造函数,我想调用超级 class 构造函数,但在我想首先对子 class 做一些逻辑之前,我可以调用一个接收这 3 个参数的静态方法,但我必须 return 只有一个,所以这就是解决方案我想到了
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;
}
}
好像有点丑,想知道有没有更好的方案自己使用参数然后定时调用super。请注意,我无法更改 Super class 或子 classes 的用法,因此无法更改工厂设计模式
要从构造函数中获取逻辑,您可以轻松地在子类中创建一个工厂方法:
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();
假设我有一个超级 class,它的构造函数中有 3 个参数,我正在继承这个 class,它也有一个带有 3 个参数的构造函数,我想调用超级 class 构造函数,但在我想首先对子 class 做一些逻辑之前,我可以调用一个接收这 3 个参数的静态方法,但我必须 return 只有一个,所以这就是解决方案我想到了
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;
}
}
好像有点丑,想知道有没有更好的方案自己使用参数然后定时调用super。请注意,我无法更改 Super class 或子 classes 的用法,因此无法更改工厂设计模式
要从构造函数中获取逻辑,您可以轻松地在子类中创建一个工厂方法:
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();