java中自动调整返回类型

问题描述 投票:0回答:2

在我的项目中,我发现我想要一种方法来创建具有相同值的数组。别担心,有 Array.fill(Array, value) 可以做到这一点,但我发现自己经常需要排列某个对象,所以我尝试想出一个方法:

private static Object[] unit(int len, Object val) {
    /*
     * creates an array of equal values
     */
    
    Object[] res = new Object[len];

    Arrays.fill(res, val);

    return res;
}

然后在另一端进行投射,但这给了我一些关于无法投射的奇怪错误我必须使用但无法修改的奇怪类,所以我试图想出一个更好的解决方案。

我试过了

private static Object[] unit(int len, Object val) {
    /*
     * creates an array of equal values
     */
    
    Object c=val.getClass();
    
    c[] res = new Object[len];

    Arrays.fill(res, val);

    return res;
}

但是编译器抱怨 c 不是合法的参数。有什么方法可以避免像我想使用的每个对象一样复制意大利面?

java
2个回答
4
投票

编辑:如果

val
的实际类型是某种比
Foo
更具体的
T
类型,那么生成的数组将不是
T[]
,而是
Foo[]
。这意味着您只能放入其他
Foo
,而不能放入任何
T
。我认为解决这个问题的方法是让该方法接受
Class
,但我不确定。


您可以按照

HumanTarget
的建议使用泛型,但您需要
Array.newInstance
来创建新的
T[]

<T> T[] unit(int len, T val) {
  T[] res = (T[]) Array.newInstance(val.getClass(), len);
  Arrays.fill(res, val);
  return res;
}

您还可以使用其他

newInstance
方法来创建多维数组,该方法将采用多个整数来表示数组的维度。


4
投票

我认为你想在这里使用的是通用类型

static <T> T[] unit(int len, T val) {
    /*
     * creates an array of equal values
     */
    T[] res = (T[]) Array.newInstance(val.getClass(), len);
    Array.fill(res, val);

    return res;
}
© www.soinside.com 2019 - 2024. All rights reserved.