创建对象构造函数时如何避免重复参数名称(即与对象属性几乎相同的名称)?

How to avoid repetitive parameter names (i.e. nearly the same name as an attribute of the object) when creating an object constructor?

我对 OOP 编程非常陌生,所以如果这是一个 stupid/irrelevant 问题,我提前道歉

下面是JavaScript

中一个非常简单的对象构造器
function Class(assign_to_a, assign_to_b){
    this.a=assign_to_a;
    this.b=assign_to_b;
}
object=new Class(2,3);

我确实觉得我在重复自己的话。我已经在 class 中命名了对象的属性,那么为什么我需要在一个参数上重写相同的(稍微改变的)名称,其唯一目的是分配给一个已经具有描述性的属性姓名?

为了更好地理解我想要实现的目标,JavaScript 已经为此提供了一个巧妙的解决方案:

function Class(){
    this.a=arguments[0];
    this.b=arguments[1];
}
object=new Class(2,3);

这样,当我已经知道所有参数都将在创建时分配给对象的属性时,我就不必想出 with/rewrite 参数名称了。

我的问题是,我认为没有太多其他语言有像 JavaScript 那样的参数对象(尽管我对此可能是错误的),所以我将不得不找到另一个解决方法。现在,我正在尝试在 Java.

中创建相同的 class
public class Class{
    int a, b;
  
    public Class(int assign_to_a, int assign_to_b){
        a = assign_to_a;
        b = assign_to_a;
    }

    public static void main(String[] args) {
        Class object = new Class(2, 3);
    }
}

有没有办法解决为对象构造函数的参数重复命名的问题,类似于我在 JavaScript 中所做的,或者这是我必须提出的问题与?

据我所知,您无法避免在 Java 的方法签名中指定参数。

但我认为这是 Java 的一个很棒的特性,因为它在编译时检查参数类型并避免将错误的参数传递给函数时出现的所有问题。

如果您想避免重复和样板代码,有很多库可以提供帮助,例如“Project Lombok”。

您可以让构造函数只接受一个参数,而不是创建多个参数:ArrayList。然后,您可以通过将对象的私有属性和 public 属性从构造函数的 ArrayList 中拉出来设置它们。在 Java 中,这似乎是最接近 JavaScript 的“参数对象”(就类型灵活性而言)。

我没有在 Java 中编写代码,但根据您的示例,我认为它可能看起来像这样:

public class Class{
    int a, b;
  
    public Class(ArrayList ary){
        a = ary[0];
        b = ary[1];
    }

    public static void main(String[] args) {
        ArrayList ary = new ArrayList();
        ary.add(2);
        ary.add(3);
        Class object = new Class(ary);
    }
}

我不知道这是否会编译,但希望它足以传达这个概念。