帮助我使用通用数据类型

时间:2014-06-06 01:11:22

标签: java generics types primitive-types

请帮帮我。这是一个家庭作业,我无法弄清楚为什么它不会工作。当我调用线性搜索方法时,它说我没有传递正确的数据类型T.T应该是通用数据类型,所以我不明白为什么它给我带来了困难。请帮忙!

    public static void main(String[] args) {
        int[] five= new int[5];
        int[] ten= new int[10];
        int[] fifteen= new int[15];
        fillArray(five);
        fillArray(ten);
        fillArray(fifteen);

        int result1 = linearSearch(five, 37);
        int result2 = linearSearch(ten, 37);
        int result3 = linearSearch(fifteen, 37);

        System.out.println(Arrays.toString(five) + " " + result1);
        System.out.println(Arrays.toString(ten) + " " + result2);
        System.out.println(Arrays.toString(fifteen) + " " + result3);

    }

//此方法对填充的数组执行线性搜索,并且必须接受所有数据类型。

    public static <T extends Comparable<T>> int linearSearch(T[] array, T data){
        int value = -1;  
          for(int i=0; i<array.length; i++){
            if (array[i]== data){
                value = i;
              }
          }
          return value;
        }

2 个答案:

答案 0 :(得分:3)

泛型不适合原始类型。您只能使用实际对象。不幸的是,自动拳击在这种情况下不会神奇地工作。

您可以通过使用包装器对象Integer来使用此工具并继续使用泛型(假设您的fillArray方法将与Integer对象一起使用,因为它可以使用public static void main(String[] args) { Integer[] five = new Integer[5]; Integer[] ten = new Integer[10]; Integer[] fifteen = new Integer[15]; fillArray(five); fillArray(ten); fillArray(fifteen); int result1 = linearSearch(five, 37); int result2 = linearSearch(ten, 37); int result3 = linearSearch(fifteen, 37); System.out.println(Arrays.toString(five) + " " + result1); System.out.println(Arrays.toString(ten) + " " + result2); System.out.println(Arrays.toString(fifteen) + " " + result3); } 对象。没有张贴在你的例子中)。如,

{{1}}

如果您对某些形式理论感兴趣,可以在JLS 4.5 - Parameterized Types中阅读有关类型参数的更多信息。正如您在4.5.1中看到的那样,它表示:

  

类型参数可以是引用类型或通配符。

...隐含地排除了原始类型。无法在JLS中找到它实际明确禁止它们的位置,但我确定它在那里。

答案 1 :(得分:1)

你无法使用Generics,但你可以使用reflection!像这样,

public static int linearSearch(Object array,
    Object data) {
  int len = Array.getLength(array);

  for (int i = 0; i < len; i++) {
    if (Array.get(array, i).equals(data)) {
      return i;
    }
  }
  return -1;
}

public static void main(String[] args) {
  int[] five = new int[] { 1, 2, 37 };
  int[] ten = new int[] { 1, 37, 5 };
  float[] fifteen = new float[] { 1.0f, 2.2f, 0f, 4f };

  int result1 = linearSearch(five, 37);
  int result2 = linearSearch(ten, 37);
  int result3 = linearSearch(fifteen, 37);

  System.out.println(Arrays.toString(five) + " "
      + result1);
  System.out.println(Arrays.toString(ten) + " "
      + result2);
  System.out.println(Arrays.toString(fifteen) + " "
      + result3);
}

输出是,

[1, 2, 37] 2
[1, 37, 5] 1
[1.0, 2.2, 0.0, 4.0] -1