我已經寫了一個任務管理器,好吧,這是一個很長的故事......所有的東西都在Java中,所以我寫了一個Facade,你可以在下面看到有一個問題用HashMap和我懷疑在構造過程中試圖添加到HashMap中的值不太好,觸發空指針異常的方法是create方法,該方法的輸入參數已被驗證通過我和我可信的調試器來填充。空指針在我的門面:(
這裏的任何幫助都會很棒......我確定我忘了提及一些東西,所以我會立即回覆評論,因爲我現在需要完成這個任務。
package persistence;
import java.util.UUID;
import java.util.HashMap;
import persistence.framework.ComplexTaskRDBMapper;
import persistence.framework.IMapper;
import persistence.framework.RepeatingTaskRDBMapper;
import persistence.framework.SingleTaskRDBMapper;
public class PersistanceFacade {
@SuppressWarnings("unchecked")
private static Class SingleTask;
@SuppressWarnings("unchecked")
private static Class RepeatingTask;
@SuppressWarnings("unchecked")
private static Class ComplexTask;
private static PersistanceFacade uniqueInstance = null;
@SuppressWarnings("unchecked")
private HashMap<Class, IMapper> mappers;
public PersistanceFacade() {
mappers = new HashMap<Class, IMapper>();
try {
SingleTask = Class.forName("SingleTask");
RepeatingTask = Class.forName("RepeatingTask");
ComplexTask = Class.forName("ComplexTask");
mappers.put(SingleTask, new SingleTaskRDBMapper());
mappers.put(RepeatingTask, new RepeatingTaskRDBMapper());
mappers.put(ComplexTask, new ComplexTaskRDBMapper());
}
catch (ClassNotFoundException e) {}
}
public static synchronized PersistanceFacade getUniqueInstance() {
if (uniqueInstance == null) {
uniqueInstance = new PersistanceFacade();
return uniqueInstance;
}
else return uniqueInstance;
}
public void create(UUID oid, Object obj) {
IMapper mapper = (IMapper) mappers.get(obj.getClass());
mapper.create(oid, obj);
}
@SuppressWarnings("unchecked")
public Object read(UUID oid, Class type) {
IMapper mapper = (IMapper) mappers.get(type);
return mapper.read(oid);
}
public void update(UUID oid, Object obj) {
IMapper mapper = (IMapper) mappers.get(obj.getClass());
mapper.update(oid, obj);
}
@SuppressWarnings("unchecked")
public void destroy(UUID oid, Class type) {
IMapper mapper = (IMapper) mappers.get(type);
mapper.destroy(oid);
}
}
你在mappers.get(obj.getClass())中的create()方法中定義映射器的位置;? – CoolBeans 2010-12-18 10:52:58
當你在調試器中運行時會發生什麼?這應該有助於你理解發生的事情。 – 2010-12-18 10:56:52
我現在看到映射器在構造函數中被初始化。你怎麼調用create()? – CoolBeans 2010-12-18 10:59:06