我使用泛型,但不是这个类<t>的东西!</t>

时间:2010-02-09 20:18:16

标签: java generics collections

我正在尝试使用Google Collections调用this method连接两个数组

public static <T> T[] concat(T[] first,
                             T[] second,
                             Class<T> type)

它返回空结果。我正在使用

ObjectArrays.concat(array1, array2, Blah.class)

这是唯一可以编译的东西。

array1array2的类型为Blah[]

什么是正确的语法?

加分问题:其他收藏库是否有包含示例的文档?

编辑:问题是我的骨头代码。

public void register(ButtonPair[] pairs) {
    pairs = ObjectArrays.concat(this.pairs, pairs, ButtonPair.class);
}

事情的右侧是可以的,但由于模棱两可,左侧分配给this.pairs。抱歉!并向Google Collections致敬!

4 个答案:

答案 0 :(得分:3)

有关Google Collections类的一些示例用法,请查看unit tests

example

String[] result = ObjectArrays.concat(
    new String[] { "a", "b" }, new String[] { "c", "d" }, String.class);
assertEquals(String[].class, result.getClass());
assertContentsInOrder(Arrays.asList(result), "a", "b", "c", "d");

那么,Class<T>表示法的含义是它需要你指定另外两个参数数组中的对象属于哪个类。

答案 1 :(得分:3)

以下对我有用:


String[] arr1 = { "abc", "def" };
String[] arr2 = { "ghi", "jkl" };
String[] result = ObjectArrays.concat(arr1, arr2, String.class);

你如何从concat()获得结果?

答案 2 :(得分:1)

您的语法看起来完全正确。我认为问题必须在其他地方。您是否100%确定输入值?这是一个测试用例:

import com.google.common.collect.ObjectArrays;

public class ObjectArrayTest
{
    public static void main(String[] args)
    {
        String[] first = new String[] { "Fire", "Earth" };
        String[] second = new String[] { "Water", "Air" };

        String[] result = ObjectArrays.concat(first, second, String.class);

        for (String s : result)
        {
            System.out.println (s);
        }
    }
}

答案 3 :(得分:0)

这不是因为您没有将结果分配给实例变量而是分配给方法变量。

就是这样:

public void register(ButtonPair[] pairs) {
    pairs = ObjectArrays.concat(this.pairs, pairs, ButtonPair.class);
    }

应该是

public void register(ButtonPair[] pairs) {
    this.pairs = ObjectArrays.concat(this.pairs, pairs, ButtonPair.class);
    }

顺便说一句,这就是为什么在我们的商店中,我们对方法参数和变量的命名约定与实例变量的命名约定不同(尽管不是像_someInstanceVar这样的实例变量的可怕前缀/后缀)。