У меня есть IMAP, ключ которого — String
, а значение — производное от ArrayList
. Мне нужно запустить EntryProcessor
на ключе этой карты. Также обратите внимание, что Employee
— это POJO, реализующий интерфейс Serializable
.
Когда я выполнил код, приведенный ниже, код печатает «Почему так!» и я получил ClassCastException
, в котором упоминалось, что java.util.ArrayList
нельзя привести к Employees
в методе process()
ListValueEntryProcessor
, указанном ниже.
Q1. Я узнал, что мне нужно добавить пользовательский сериализатор для моего типа (Employees
), чтобы его можно было сериализовать как объект Employees
, а не как объект ArrayList
. Я хотел бы знать, почему обязательно добавлять «пользовательский сериализатор» для встроенного типа, такого как ArrayList
, элементы которого также отмечены Serializable
?
public class Employees extends ArrayList implements Serializable
{
private static final long serialVersionUID = 1L;
/**
Constructs a new employees object
*/
public Employees()
{
super();
}
}
HazelcastInstance hazelcastInstance = HazelcastHelper.getHazelcastInstance();
IMap<String, Employees> empMap = hazelcastInstance.getMap("employeesMap");
Employees empList = new Employees();
Employee employee = new Employee();
empList.add(employee);
empMap.put("companyId", employees);
empMap.executeOnKey("companyId", new IncSalaryEntryProcessor());
public static class ListValueEntryProcessor extends AbstractEntryProcessor<String, Employees>
{
private static final long serialVersionUID = 1L;
@Override
public Object process(Entry<String, Employees> arg0)
{
if(! (arg0.getValue() instanceof Employees))
{
System.out.println("Why so !");
}
// ClassCastException thrown here.
Employees empList = arg0.getValue();
return true;
}
}
java.util.ArrayList
. Есть связанный вопрос, который подтверждает мое понимание. stackoverflow.com/questions/31537670/ - person Dinesh   schedule 13.10.2015Employees empList = arg0.getValue();
. Это известный случай с hazelcast, см. ссылку SO, которую я разместил выше. - person Dinesh   schedule 13.10.2015arg0.getValue() instanceof ArrayList
оценивается какtrue
- person Dinesh   schedule 13.10.2015