Что не так с этим объявлением Java HashMap? Легкие очки - PullRequest
1 голос
/ 18 декабря 2010
private HashMap<String, IMapper> mapper = new HashMap<String, IMapper>();

Кажется таким невинным, но Затмение жалуется на точку с запятой, на все вещи.

Ошибка затмения: синтаксическая ошибка на токене ";", недопустимый AssignmentOperator

Спасибо

Весь класс:

package persistence;

import java.util.UUID;
import java.util.HashMap;

import domain.Task;

public class PersistanceFacade {

    private static PersistanceFacade uniqueInstance = null;
    private HashMap<String, IMapper> mapper = new HashMap<String, IMapper>();


    (SingleTaskRDBMapper) mapper.put("SingleTask", new SingleTaskRDBMapper());

    public PersistanceFacade() {};

    public static synchronized PersistanceFacade getUniqueInstance() {
        if (uniqueInstance == null) {
            uniqueInstance = new PersistanceFacade();
            return uniqueInstance;
        }
        else return uniqueInstance;
    }

    @SuppressWarnings("unchecked")
    public Object get(UUID oid, Class type) {
        Object mappers;
        IMapper mapper = ((HashMap<String, IMapper>) mappers).get(type);
    }

}

Ответы [ 3 ]

4 голосов
/ 18 декабря 2010

Линия

(SingleTaskRDBMapper) mapper.put("SingleTask", new SingleTaskRDBMapper());

не на своем месте. Вы должны поместить это в конструктор:

public PersistanceFacade() {
  mapper.put("SingleTask", new SingleTaskRDBMapper());
}

Также обратите внимание, что я удалил лишнюю точку с запятой после закрывающей скобки конструктора. Я также не уверен, что происходит в методе get. Вы объявляете объект mappers, но никогда не инициализируете его. Это, безусловно, приведет к ошибке.

1 голос
/ 18 декабря 2010

Этот код работает отлично :), вдохновленный помощью laz

package persistence;

import java.util.UUID;
import java.util.HashMap;

public class PersistanceFacade {

    private static PersistanceFacade uniqueInstance = null;
    private HashMap<String, IMapper> mappers = new HashMap<String, IMapper>();

    public PersistanceFacade() {
        mappers.put("SingleTask", new SingleTaskRDBMapper());

    }

    public static synchronized PersistanceFacade getUniqueInstance() {
        if (uniqueInstance == null) {
            uniqueInstance = new PersistanceFacade();
            return uniqueInstance;
        }
        else return uniqueInstance;
    }

    @SuppressWarnings("unchecked")
    public Object get(UUID oid, Class type) {
        IMapper mapper = (IMapper) mappers.get(type);
        return mapper.get(oid);
    }

}
1 голос
/ 18 декабря 2010

Не уверен, что такое IMapper, какой-то интерфейс, я полагаю, но я просто перенес это в Eclipse, и он не дает мне никаких ошибок:

private interface IMapper {}
private HashMap<String, IMapper> mapper = new HashMap<String, IMapper>();

Возможно, вы могли бы опубликовать больше своего кода?

...