Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Map.Entry : entrySet()  [new]
Molasar
Member

Откуда:
Сообщений: 700
Всем привет!

Есть класс Event. Создаю: List<Event> objectList = new ArrayList<>();
Передаю лист в другой класс как дженерик: List<T> objectList
Как правильно получить доступ в пропертям?
Вот это не работает: for (Map.Entry<Object, Object> entry : ((Properties) object).entrySet()) {}
Дебагер не может зайти в тело цикла.

public class Event implements Serializable {
    
    private Properties properties;

    public Event(Properties properties) {
        this.properties = properties;
    }

    public Properties getProperties() {
        return properties;
    }
    
}


for (T object : objectList) {
    rsNextSeqValue = statement.executeQuery(sqlGetNextSeqValue);
    if (rsNextSeqValue.next()) {
        for (Map.Entry<Object, Object> entry : ((Properties) object).entrySet()) {
            prStatement.setString(1, (String) entry.getKey());
            prStatement.setString(2, (String) entry.getValue());
            prStatement.setLong(3, rsNextSeqValue.getLong(1));
            prStatement.addBatch();
        }
    }
}
                                       
prStatement.executeBatch();
connection.commit();
21 июн 19, 17:21    [21913154]     Ответить | Цитировать Сообщить модератору
 Re: Map.Entry : entrySet()  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1721
Molasar,

1) Измените тип параметра с List<T> objectList на List<? extends Event>
2) В цикле вместо T используйте Event.
21 июн 19, 19:10    [21913184]     Ответить | Цитировать Сообщить модератору
 Re: Map.Entry : entrySet()  [new]
Molasar
Member

Откуда:
Сообщений: 700
Lelouch
Molasar,

1) Измените тип параметра с List<T> objectList на List<? extends Event>
2) В цикле вместо T используйте Event.

Таки цель совсем избавится от упоминания Event
24 июн 19, 09:13    [21913818]     Ответить | Цитировать Сообщить модератору
 Re: Map.Entry : entrySet()  [new]
Мозговой_слизень
Member

Откуда:
Сообщений: 3008
А компилятор что пишет?

Просто у тебя вот например в цикле тип ссылки Map.Entry, а метод entrySet ты пытаешься привести к типу Properties, что подразумевает реализацию этого метода в классе Properties. Или я что-то не так понял.
24 июн 19, 10:44    [21913897]     Ответить | Цитировать Сообщить модератору
 Re: Map.Entry : entrySet()  [new]
ivanra
Member

Откуда:
Сообщений: 851
Так цикл по Event, а object из цикла кастуется почему-то к Properties. Нужно от object взять getProperties(). Если хочется избавиться от зависимости на Event, то надо вводить интерфейс, либо использовать рефлексию/MethodHAndle
24 июн 19, 10:58    [21913905]     Ответить | Цитировать Сообщить модератору
 Re: Map.Entry : entrySet()  [new]
Molasar
Member

Откуда:
Сообщений: 700
ivanra
Так цикл по Event, а object из цикла кастуется почему-то к Properties. Нужно от object взять getProperties(). Если хочется избавиться от зависимости на Event, то надо вводить интерфейс, либо использовать рефлексию/MethodHAndle

Что значит надо вводить интерфейс в моём случае?
24 июн 19, 11:16    [21913918]     Ответить | Цитировать Сообщить модератору
 Re: Map.Entry : entrySet()  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1721
Molasar,

public interface IAmNotEvent {
       Properties getProperties();
}

public class Event implements Serializable, IAmNotEvent {
    
    private Properties properties;

    public Event(Properties properties) {
        this.properties = properties;
    }

    @Overide
    public Properties getProperties() {
        return properties;
    }    
}

public void writeNotEvents(final List<? extends IAmNotEvent> notEvents) {
    for (IAmNotEvent object : notEvents) {
        rsNextSeqValue = statement.executeQuery(sqlGetNextSeqValue);
        if (rsNextSeqValue.next()) {
            for (Map.Entry<Object, Object> entry : object.getProperties().entrySet()) {
                prStatement.setString(1, (String) entry.getKey());
                prStatement.setString(2, (String) entry.getValue());
                prStatement.setLong(3, rsNextSeqValue.getLong(1));
                prStatement.addBatch();
            }
        }
    }
                                       
    prStatement.executeBatch();
    connection.commit();

}
24 июн 19, 11:51    [21913929]     Ответить | Цитировать Сообщить модератору
 Re: Map.Entry : entrySet()  [new]
Dmitry.
Member

Откуда: Львів
Сообщений: 833
Molasar
Таки цель совсем избавится от упоминания Event


если цель избавится от упоминания Event - то зачем вообще создавать этот класс.
пользуй Properties напрямую...
24 июн 19, 12:13    [21913943]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить