无法将char []传递给泛型方法

时间:2015-02-23 15:19:01

标签: java arrays generics

我为nCr问题写了一个实用工具类。它采用通用数组并返回所有组合(不重复)。

import java.util.ArrayList;


public class fooClass {

    public static void main(String[] args) {
        class Utils {
            public int factorial(int n) {
                int p = 1;
                int i = 1;
                while(i <= n) {
                    p *= i++;
                }
                return p;
            }
            public <T> ArrayList<T[]> combinations(T[] array, int r) {
                int n = array.length;
                int[] vec = new int[r];
                int i, j, k, m, o;
                for (i = 0; i < vec.length; i++) {
                    //int j = vec[i];
                    vec[i] = i;
                }
                ArrayList<T[]> result = new ArrayList<T[]>();
                int total = factorial(n) / (factorial(r) * factorial(n - r));
                for (i = 0; i < total; i++) {
                    T[] combination = (T[])new Object[r];
                    for (k = 0; k < r; k++) {
                        combination[k] = array[vec[k]];                    
                    }
                    result.add(combination);
                    j = r - 1;
                    if (vec[j] + 1 < n) {
                        vec[j]++;
                    } else {
                        o = j;
                        while (j-- >= 0) {
                            if (vec[j] + 1 < n - r - (j + 1)) {
                                vec[j]++;
                                m = j + 1;
                                while (m++ <= o) {
                                    vec[m] = vec[m-1] + 1;
                                }
                                break;
                            } //if end
                        } //while end
                    } //if-else end
                }

                return result;
            }
        };

        Utils utils = new Utils();
        String test = "abcde";
        ArrayList<char[]> combinations = utils.combinations(test.toCharArray(), 3);
    }

}

现在我的问题出现了问题;当我传递char[]时,编译器会抱怨。

  

Utils类型中的方法组合(T [],int)不适用于参数(char [],int)

解决此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

我认为这是因为char是原始类型而T代表一个对象。如果您使用Character[]代替char[],它应该可以正常使用。

char[] chars = test.toCharArray();
Character[] arg = new Character[chars.length];
for (int i = 0; i < chars.length; i++)
    arg[i] = chars[i];
ArrayList<Character[]> combinations = utils.combinations(arg, 3);

将char数组中的所有字符复制到Character数组中,然后将其传递给方法。