Могу ли я использовать один и тот же метод с разными, но сопоставимыми данными? - PullRequest
1 голос
/ 08 марта 2019

Я пишу следующий метод, который принимает массив в качестве входных данных и записывает элементы этого массива в файл .txt:

public static void writeArrayToTxt(Object[] array, String filename) throws FileNotFoundException, UnsupportedEncodingException
    {
        PrintWriter writer = new PrintWriter(filename, "UTF-8");
        for(int i = 0; i < array.length; i++)
        {
            String line = "";                       
            line = array[i] + "";                   
            writer.println(line);
        }
        writer.close();
    }

Однако я хотел бы иметь возможность использовать один и тот же метод как для массива целых чисел, так и для массива двойных чисел, поскольку для этого не требуется другое тело метода. Это возможно? Если да, то какой вклад я должен дать в метод?

Просто пытаюсь

int[] arrayInt = {1, 2, 3, 4, 5};
writeArrayToTxt(arrayInt, "test.txt");

выдаст 'Метод writeArrayToTxt (Object [], String) в тесте типа не применим для аргументов (int [], String)'

Ответы [ 3 ]

3 голосов
/ 08 марта 2019

Итак, int - это тип примитива данных в Java и не может быть представлен как Object.Используйте Integer:

 Integer[] arrayInt = {1, 2, 3, 4, 5};

Примечание: если вы хотите передать только массивы Integer и Double, я предложу использовать более конкретный аргумент, такой как массив Number []:

writeArrayToTxt(Number[] array, String filename)

Если вы получите int [] в качестве возврата любого метода, вы можете преобразовать его в Integer [] / Double [], как показано ниже.

int[] arrayInt = { 1, 2, 3, 4, 5 };
Integer[] arrayInteger = Arrays.stream(arrayInt).boxed().toArray(Integer[]::new);
1 голос
/ 08 марта 2019

Вы можете использовать универсальный метод

public static <T> void writeArrayToTxt(T[] array, String filename) 

и использовать его различные типы массивов

Integer[] intArr = new Integer[] {1, 2, 3};
Double[] doubleArr = new Double[] {4.5, 5.3, 3.2};
String[] stringArr = new String[] {"abc", "def", "ghi"};
writeArrayToTxt(intArr, "somefile1");
writeArrayToTxt(doubleArr, "somefile2");
writeArrayToTxt(stringArr, "somefile3");
0 голосов
/ 08 марта 2019

Измените подпись на:

public static void writeArrayToTxt(Number[] array, String filename) throws FileNotFoundException, UnsupportedEncodingException

и назовите ее так:

Integer[] arrayInt = {1, 2, 3, 4, 5};
writeArrayToTxt(arrayInt, "test.txt");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...