我有一个类似的父类
class A{
//Constructors only called by builder.
public static class builder{
//builder code.
}
}
Class B Extends ClassA{
//constrctor
}
现在,如果我在测试
final classA dempClassA = new ClassB("parameters here");
我现在怎么能打电话给建设者。。?
对不起,伙计们,建设者是一个阶级。。。我的错误。
如果我完全理解你想说的话,你会遇到以下情况:
public class ClassA {
// Constructors only called by builder.
public static class Builder {
// builder code.
public static void hello() {
System.out.println("Hello");
}
public void hello1() {
System.out.println("Hello1");
}
}
}
你可以这样访问它:
class ClassB extends ClassA {
public static void main(String[] args) {
ClassA.Builder.hello();
ClassA.Builder builder = new Builder();
builder.hello1();
}
}
如果您想从A
类外部调用该方法,那么它不应该是私有的。
如果你只是想让它成为B
创建过程的一部分,那么你应该这样做:
class B extends A {
public B() {
super(); // invokes A's constructor
}
}
class A {
public A(){
// use builder() here
}
}
使ClassA的builder
方法protected
(而不是private
)对ClassB可见,然后使用匿名类来调用它,如下所示:
ClassA tempClassA = new ClassB("parameters here") {
{
// This block is called during construction
builder();
}
};
由于builder
(这是一个类btw?还是缺少返回类型?)是静态的,所以您可以像A.builder()
一样调用它。为了使其可见,您不应该将其设为私有:)
编辑:由于它是一个类,您有几种可能性:
- 如果需要新实例,请调用
new A.builder(...)
- 如果构建器提供静态方法(在这种情况下,问题是为什么这是一个类),则调用
A.builder.someStaticMethod(...)