Java Generics - Несоответствие типов в конструкторе - PullRequest
0 голосов
/ 14 ноября 2011

У меня возникнет вопрос, связанный с обобщением java.

У меня есть обобщенный класс LabyrinthImpl с параметром типа T.Каждый экземпляр имеет двумерный массив T[][] values.Проблема заключается в конструкторе, где я указываю файл для чтения в двумерный массив символов.

public class LabyrinthImpl<T> implements Labyrinth<T> {

    /**
     * 2d array to hold information about the labyrinth.
     */
    private T[][] values;

    /**
     * Constructor.
     * @param values 2d array to hold information about the labyrinth.
     */
    public LabyrinthImpl(T[][] values) {
        this.values = values;
    }

    /**
     * Constructor.
     * @param file File from which to read the labyrinth.
     * @throws IOException
     */
    public LabyrinthImpl(File file) throws IOException {

        BufferedReader in = new BufferedReader(new FileReader(file));
        LinkedList<String> list = new LinkedList<String>();

        String line;
        int maxWidth = 0;
        while((line = in.readLine()) != null)
        {
            list.add(line);
            if(line.length() > maxWidth)
                maxWidth = line.length();
        }

        char[][] vals = new char[list.size()][maxWidth];

        for(int i = 0; i < vals.length; i++)
        {
            vals[i] = list.remove().toCharArray();
        }

        values = vals; //not working, type mismatch
    }


    //methods..

}

Я бы хотел установить T[][] values в char[][] vals, но здесь происходит несоответствие типов.

Итак, мой вопрос: есть ли способ сообщить конструктору, что параметр типа T следует интерпретировать как Character, чтобы он принимал мой массив 2d char?Какие-либо предложения?Также заранее спасибо!

1 Ответ

4 голосов
/ 14 ноября 2011

Ваш вопрос не имеет смысла.
Если бы T не Character, что бы вы ожидали?

Вы должны создать неуниверсальный класс, который реализует Labyrinth<Character>.

Если вы хотите поддерживать другие типы, когда не читаете из файлов, вы должны заменить этот конструктор неуниверсальными статическими методами, которые возвращают Labyrinth<Character>.

...