相关疑难解决方法(0)

什么是原始类型,为什么我们不应该使用它?

问题:

  • 什么是Java中的原始类型,为什么我经常听说不应该在新代码中使用它们?
  • 如果我们不能使用原始类型,它有什么替代方案,它是如何更好的?

java generics raw-types

617
推荐指数
13
解决办法
20万
查看次数

子类化Java Builder类

这篇Dr Dobbs文章,特别是Builder Pattern,我们如何处理子类化Builder的情况?以我们想要子类化添加GMO标签的示例的简化版本为例,一个简单的实现将是:

public class NutritionFacts {                                                                                                    

    private final int calories;                                                                                                  

    public static class Builder {                                                                                                
        private int calories = 0;                                                                                                

        public Builder() {}                                                                                                      

        public Builder calories(int val) { calories = val; return this; }                                                                                                                        

        public NutritionFacts build() { return new NutritionFacts(this); }                                                       
    }                                                                                                                            

    protected NutritionFacts(Builder builder) {                                                                                  
        calories = builder.calories;                                                                                             
    }                                                                                                                            
}
Run Code Online (Sandbox Code Playgroud)

子类:

public class GMOFacts extends NutritionFacts {                                                                                   

    private final boolean hasGMO;                                                                                                

    public static class Builder extends NutritionFacts.Builder {                                                                 

        private boolean hasGMO = false;                                                                                          

        public Builder() …
Run Code Online (Sandbox Code Playgroud)

java design-patterns

123
推荐指数
4
解决办法
6万
查看次数

使用构建器模式扩展类

我正在尝试将 a 类扩展到 aX。所以,我也扩展了 aBuilder。但是,虽然我能够使用以下方法创建类 a 的对象:

aBuilder f = new aBuilder();
f.bi = i;
f.bs = s;
a atry = f.withI(i).withS(s).build();
Run Code Online (Sandbox Code Playgroud)

这同样不适用于 aX。当我尝试这样做时:

aXBuilder fb = new aXBuilder();
aX aXtry = fb.withI(i).withS(s).withB(b).build();
Run Code Online (Sandbox Code Playgroud)

我收到错误消息(对于 a.aBuilder 类型,未定义 withB(Boolean) 方法)。我应该为 aX 重写所有内容,而不是简单地添加新内容吗?我不想这样做,因为这会导致我的代码中有很多重复。类 a 和 aX 如下所示:

class a {

protected String s;
protected int i;

public void getdata() {
    System.out.println(this.s);
    System.out.println(this.i);
}

protected a(aBuilder fb) {
    this.s = fb.bs;
    this.i = fb.bi;
}

public static class aBuilder {
    public aBuilder() {
    } …
Run Code Online (Sandbox Code Playgroud)

java oop inheritance builder

3
推荐指数
1
解决办法
4583
查看次数

标签 统计

java ×3

builder ×1

design-patterns ×1

generics ×1

inheritance ×1

oop ×1

raw-types ×1