无法将 char[] 传递给通用方法

unable to pass char[] to generic method

我为 nCr 问题编写了实用程序 class。它需要一个通用数组和 returns 所有组合(不重复)。

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[].

时编译器会报错

The method combinations(T[], int) in the type Utils is not applicable for the arguments (char[], int)

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

我认为这是因为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 数组中,然后将其传递给该方法。