如何在Java方法中处理变量的类型泛型?

如何在Java方法中处理变量的类型泛型?,java,generics,methods,Java,Generics,Methods,我是Java的新手,我正在努力学习如何使用泛型。谁能解释一下这个代码有什么问题吗 import java.util.Collection; import java.util.Iterator; public class Generics { /** * @param args */ public static void main(String[] args) { Integer a = new Integer(28); I

我是Java的新手,我正在努力学习如何使用泛型。谁能解释一下这个代码有什么问题吗

import java.util.Collection;
import java.util.Iterator;

public class Generics {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Integer a = new Integer(28);

        Integer[] b = {2, 4, 8, 16, 20, 28, 34, 57, 98, 139}; 
            //I'd prefer int[], but understand native types don't go with generics

        int c = which(a, b); // <--- error here, see below

        System.out.println("int: "+ c);
    }

    static <T extends Number> int which( T a, Collection<T> b) {
        int match = -1;
        int j = 0;
        for (Iterator<T> itr = b.iterator(); itr.hasNext();) {
            T t = (T) itr.next();
             if (a == t) {
                 match = j; 
                 break; 
             }
             j++;
        }
        return match;
    }
}
import java.util.Collection;
导入java.util.Iterator;
公共类泛型{
/**
*@param args
*/
公共静态void main(字符串[]args){
整数a=新整数(28);
整数[]b={2,4,8,16,20,28,34,57,98,139};
//我更喜欢int[],但了解本机类型不支持泛型

int c=哪个(a,b);//数组不是集合

试一试


数组不是集合

试一试

替换

Integer[] b = {2, 4, 8, 16, 20, 28, 34, 57, 98, 139}

listb=Arrays.asList(2,4,8,16,20,28,34,57,98,139);
更换

Integer[] b = {2, 4, 8, 16, 20, 28, 34, 57, 98, 139}

listb=Arrays.asList(2,4,8,16,20,28,34,57,98,139);

您只需将代码中的
which(a,b)
替换为
which(a,Arrays.asList(b))
数组。asList
是一个简单的适配器,它使数组(引用类型)与
列表
一致;它允许您在数组上轻松使用为
列表
编写的任何方法(不包括原语数组)。

您可以简单地将代码中的
哪个(a,b)
替换为
哪个(a,arrays.asList(b))
数组。asList
是一个获取数组(引用类型)的简单适配器要符合被视为
列表
;它允许您在数组(不包括原语数组)上轻松使用为
列表
编写的任何方法。

您应该明确必须修复(迭代器itr=b.Iterator();itr.hasNext();)的行“使用此解决方案。您应该明确指出,您必须使用此解决方案修复(Iterator itr=b.Iterator();itr.hasNext();)”的行。这与我想要的不完全一样(主要是对方法的更改,而不是对调用方的更改),但具有教育意义。谢谢!这与我想要的不完全一样(主要是对方法的更改,而不是对调用方的更改),但还是有教育意义的。谢谢!
Integer[] b = {2, 4, 8, 16, 20, 28, 34, 57, 98, 139}
List<Integer> b = Arrays.asList(2, 4, 8, 16, 20, 28, 34, 57, 98, 139);