Параметр для всех примитивных типов Java? - PullRequest
2 голосов
/ 11 февраля 2012

У меня есть эта функция;

static public void Print(Object[] arr) {
    for(int i = 0; i < arr.length; i++)
        System.out.println(i + " => " + arr[i]);
}

Я хочу использовать это для каждого массива примитивных типов.Разве нет способа сделать это без переопределения для каждого примитивного типа?

Примечание. Это только примерная функция.Я хочу знать технику, если она есть.

Ответы [ 4 ]

4 голосов
/ 11 февраля 2012

Примитивные массивы являются объектами в java, поэтому вы можете использовать Object -тип в качестве параметра (обратите внимание, не массив объектов, а просто объект). Проблема в том, что вам все равно нужно привести его к правильному типу, чтобы иметь возможность перебирать массив.

public class ArrayTest
{
    public void paramTest(Object args)
    {       
        if(args instanceof int[])
        {
            System.out.println("int-array");
        }

        if(args instanceof float[])
        {
            System.out.println("float-array");
        }
    }

    @Test
    public void test()
    {
        paramTest(new int[5]);
        paramTest(new float[5]);
    }
}

Выход:

int-array
float-array
3 голосов
/ 11 февраля 2012

Нет, это невозможно.Типы элементов массива не переносятся, формальный параметр Object[] не применим, например, int[] фактический параметр.Вы должны написать один метод для каждого типа примитива, как в java.util.Arrays.Уродливый, но единственный способ.

1 голос
/ 11 февраля 2012

Да, это называется дженерики.Обобщения - как шаблоны в c ++ - тип переменной.

Посмотрите здесь: http://en.wikipedia.org/wiki/Generics_in_Java

0 голосов
/ 11 февраля 2012

Вы можете использовать такие обобщения Java, чтобы добиться желаемого, здесь Number равно java.lang.Number:

public static <T extends Number> void print(T[] arr)
{
    for (int i = 0; i < arr.length; i++)
    {
        System.out.println(i + " => " + arr[i]);
    }
}

Но это будет работать только для массива Примитивных классов-оболочек а не для примитивных массивов.

...