【问题标题】:unable to pass char[] to generic method无法将 char[] 传递给泛型方法
【发布时间】:2015-02-23 15:19:01
【问题描述】:

我为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)

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

【问题讨论】:

  • 使用 Character[] 代替 char[]
  • ArrayList 接受一个对象,而不是一个原语。
  • 这就是为什么你在 Arrays 类中拥有所有这些重载方法的原因。

标签: java arrays generics


【解决方案1】:

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

【讨论】:

  • 耶哈!很好的答案! :-)
  • 我试过了,效果很好。请告诉我您遇到了什么错误,以便我尝试修复它。
  • 无法从什么打印?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多