Есть ли способ реализовать обобщенный класс c для отображения полей объекта? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть несколько классов (например, Больница, Доктор, Медсестра и т. Д. c), и мне нужно написать обобщенный класс c, который добавляет к файлу объект другого типа. У каждого класса есть метод, который отображает его поля, но я не могу передать эту ошибку "Не удается разрешить метод 'print' в T"
Вот код:

package Service;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class WriteFileService<T>
{
    private static WriteFileService instance;

    private WriteFileService(){}

    public static WriteFileService getInstance()
    {
        return instance;
    }

    public void appendObject(T object, String fileName)
    {
        try {
            File file = new File(fileName);

            // creates the file if it does not exist
            if (!file.exists())
                file.createNewFile();

            FileWriter fw = new FileWriter(file, true); // append mode = true
            BufferedWriter bufferedWriter = new BufferedWriter(fw);

            object.print(bufferedWriter); //! ERROR: Cannot resolve method 'print' in T

            bufferedWriter.flush();
            bufferedWriter.close();
        }
        catch(IOException e)
        {
            System.out.println("Problem handling the files!");
            e.printStackTrace();
        }
    }
}


Любая помощь в отношении метода будет полезна

1 Ответ

2 голосов
/ 22 апреля 2020

Из-за стирания типа ваш T рассматривается как объект (во время выполнения), и в классе Object нет метода print(). Вы можете добавить интерфейс:

public interface Printable {
    void print();
}

и позволить всем вашим классам реализовать его. Тогда вам нужно изменить это:

public class WriteFileService<T>

на это:

public class WriteFileService<T extends Printable>

...