如何处理类型数组的Java默认构造函数参数? (没有静态工厂方法或构建器模式)

问题描述 投票:1回答:1

除了通过静态工厂方法或生成器模式之外,是否有任何其他方法来处理数组类型的默认构造函数参数?

[关于如何使用构建器模式和静态工厂方法执行此操作的讨论颇有成效,here上还有很多其他示例,这些示例涉及如何处理具有不同参数计数的各种构造函数,但是所有这些模式似乎仅包含简单类型的参数(例如int,double等),我可以正常工作了。我正在尝试使用类型为array的默认参数,并且无法使用标准构造函数设置来实现此目的。

它尝试了几种方法,它们都会导致某种类型的错误,因此我正在寻找一种替代方法,仍然使用构造函数模式。第一种方法:

public class MyClass{

    double[] mWeights;

    public MyClass(){
        double[] weights = {1, 1, 1}
        this(weights);
    }

    public MyClass(double[] weights){
        this.mWeights = weights
    }
}

但是这会导致错误:

对'this()'的调用必须是构造函数主体中的第一条语句

或者,我尝试过:

public class MyClass{

    double[] mWeights = new double[] {1, 1, 1};  

    public ActionDistribution(){
        this(mWeights); 
    }  

    public ActionDistribution(double[] weights){  
        this.mWeights = weights;
    }
}

但是这会导致错误:

无法在调用超类型构造函数之前引用'MyClass.mWeights'。

最后,我尝试过:

public class MyClass{

    double[] Mweights;  

    public ActionDistribution(){
        this({1, 1, 1}); 
    }  

    public ActionDistribution(double[] weights){  
        this.mWeights = weights;
    }
}

但是这会导致错误:

此处不允许使用数组初始化程序

关于如何在不使用静态工厂方法或构建器模式的情况下如何设置构造器以处理默认数组的任何想法?如果您有适用于任何泛型类型(而不仅仅是数组)的解决方案,那么您将获得加分,还有更多的积分可用于解释为什么这对于更简单的数据类型而非数组是可行的。

编辑:如果不清楚,以上面代码的有效形式,我希望以后再致电

MyClass myClass = new MyClass();

并使其具有字段myClass.mWeights的值{1, 1, 1}的myClass对象

java default-value
1个回答
1
投票

您很可能想使用new double[] { ... }语法:

class MyClass{

    public MyClass(){
        this(new double[] { 1, 1, 1});
    }

    public MyClass(double[] weights){
        this.mWeights = weights;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.