Я определил такую карту:
private Map<Integer, MyTask> taskMap = new ConcurrentHashMap<Integer, MyTask>();
Затем вызов (taskMap пуст), чтобы поставить задачу, будет возвращать значение null, а вызов logger вызовет исключение null-указателя из-за вызова addTask.getTaskNameId() ниже.
MyTask addedTask = taskMap.put(task.getId(), task);
logger.logTask("added task", "TaskMgmtMgr::registerTask()", "added task=" + addedTask.getTaskNameId());
Но я могу проверить, была ли эта задача успешно выполнена с этими операциями сразу после вызова выше регистратора:
private String getAvailableTaskListStr()
{
Collection<MyTask> tasks = taskMap.values();
if (tasks.isEmpty())
{
return "No running task";
}
String nameList = "";
int index = 0;
for (MyTask task : tasks)
{
if (index == 0)
{
nameList += task;
}
else
{
nameList += ", task";
}
index++;
}
return "TotalTasks in TaskMap is " + index + ": " + nameList;
}
Я запутался. Кто-нибудь может объяснить это мне? Я использую JDK 1.8.0_20.
Карта возвращает предыдущее ассоциированное значение. если ранее не было ассоциированного значения, оно возвращает null
. поэтому вы получаете null
.
предыдущее значение, связанное с ключом, или null, если не было сопоставления для ключа
просто пример:
Map<Integer, String> taskMap = new ConcurrentHashMap<Integer, String>();
String hello=taskMap.put(34, "Test1");
System.out.println("hello "+hello);//It returns null
hello=taskMap.put(34, "Test2");
System.out.println("hello "+hello);//it returns Test1
Вывод:
hello null
hello Test1