如何在Java中给“数组类”添加一个方法?

bttbmeg0  于 2023-01-11  发布在  Java
关注(0)|答案(4)|浏览(151)

我构建了一个静态方法,它向数组(大小固定)添加一个元素,你不必查看整个方法,它只是创建一个长度更大的新数组,并在其末尾添加一个元素,然后返回新数组。

static int[] add(int[] oldArray, int value){
    int n = oldArray.length;
    int[] newArray = new int[n+1];
    for(int i=0; i<n; i++){
        newArray[i]=oldArray[i];
    }
    newArray[n] = value;
    return newArray;
}

该方法应按如下方式使用

int[] a = {2, 5};
a = add(a, 7);

现在数组a有三个元素而不是两个,即2、5和7。问题是,这仍然有点混乱。有没有一种方法可以实现非静态的方法(在“预定义数组类”或其他东西中?我不太确定如何更好地表达它),使其工作方式如下所示?

int[] a = {2, 5};
a.add(7);

我试图在不使用数组列表和嵌套列表的情况下实现这一点。

j8ag8udp

j8ag8udp1#

你不能添加一个方法到“数组类”,对所有预定义的类都一样,对其他预定义的类唯一的解决方案是继承它们并添加你想要的方法,但是,数组不能这样做,因为它没有一个特定的预定义的类,它可以被定义为一个容器对象,保存固定数量的单一类型的值Arrays)。
满足您需求的备选解决方案:

  • 使用列表(例如ArrayList),如注解中所述。
  • 将数组的原始内容与新元素连接起来,对于这个解决方案,可以使用ArrayUtils.addAll(T[] array1,T... array2)或System.arraycopy,就像下面的示例(之前将新元素转换为数组)
String[] both = ArrayUtils.addAll(first, second);
  • 创建一个类来 Package 数组(将数组作为变量添加到该类中),并创建包含如下内容的addElement方法:
int[] newArray = new int[length + 1];
 for (int i = 0; i < length; i++)
     newArray[i] = this.array[i];
 newArray[length] = element;
 length ++;
 array = newArray;
vxf3dgd4

vxf3dgd42#

有没有一种方法可以将方法实现为非静态的(在一个“预定义数组类”或类似的东西中?我不太确定如何更好地表达它),这样它就可以像下面这样工作了?
不,没有,你必须使用List之类的东西,或者你自己编写一个接口来 Package 一个数组(它本身不能是数组)。

gblwokeq

gblwokeq3#

您所要求的是"extension methods" in C#,但是正如其他人已经回答的,它们在Java中不存在,但是Project Lombok(它充满了大多数专业Java开发人员应该知道和使用的非常有用的特性)用a simple annotation实现了它们。
下面是一个例子:

package so_75073262;

public class ArrayExtensions {

    public static int[] add(int[] oldArray, int value) {
        int n = oldArray.length;
        int[] newArray = new int[n + 1];

        for (int i = 0; i < n; i++) {
            newArray[i] = oldArray[i];
        }
        newArray[n] = value;
        return newArray;
    }
}
package so_75073262;

import lombok.experimental.ExtensionMethod;

@ExtensionMethod(ArrayExtensions.class)
public class Usage {

    public static void main(String[] args) {
        int[] original = {2,5};
        int[] modified = original.add(7);

        System.out.println(modified[0]);
        System.out.println(modified[1]);
        System.out.println(modified[2]);
    }
}

Lombok岛是一种"魔法",可能会得到一些课程教师"有趣"的回应;我不确定我是否推荐在Java入门类中使用它,但了解它仍然是有用的;它是工具箱中一个强大工具,可以帮助保持代码整洁。

8aqjt8rx

8aqjt8rx4#

我认为你应该参考一下ArrayList是如何实现的以及它的大小是如何动态增加的。因为它在内部使用Array来实现,你可能会从那里得到一些建议。

相关问题