![](/img/trans.png)
[英]How to make integer element value in xsd not become zero when no value entered in SOAP XML?
[英]How to Prevent Element<Integer> to become Element<Object>
為了與某些硬件同步,我創建了一個包含通用類DataField的數據模型,以在HashMap中存儲不同類型的對象。 HashMap myDictionary。
現在發現,如果我將DataField存儲到DataField中,則可以將字符串保存在DataField中。 有什么辦法可以防止這種情況的發生。
這是我的代碼:
public class DataField<T> implements IDataField<T> {
//region Fields
private T _value;
private boolean _hasChanged;
private ChildObserable<T> _hasChangedObserverable;
//endregion
//region Methodes
public DataField(T val) throws IllegalValueException {
if(val.getClass() != _value.getClass()) throw new IllegalValueException();
_value =val;
_hasChanged=false;
_hasChangedObserverable=new ChildObserable<>();
}
public DataField(T val,Observer observer){
_value =val;
_hasChanged=false;
_hasChangedObserverable=new ChildObserable<>();
addChangeObserver(observer);
}
//region getters
@Override
public T getValue() {
return _value;
}
@Override
public boolean hasBeChanged() {
return _hasChanged;
}
//endregion
//region setters
@Override
public void setValue(T value) throws IllegalValueException {
if(value.getClass()!= _value.getClass()) throw new IllegalValueException();
if(value!=_value) {
_value = value;
_hasChanged=true;
_hasChangedObserverable.sendValue(_value);
}
}
@Override
public void clearChangedState() {
_hasChanged=false;
}
//endregion
//region observers
@Override
public void addChangeObserver(Observer observer) {
_hasChangedObserverable.addObserver(observer);
}
@Override
public void removeChangeObserver(Observer observer) {
_hasChangedObserverable.deleteObserver(observer);
}
//endregion
//endregion
}
這是我的意思的代碼示例:
DataField dataField = new DataField<Integer>(5);
dataField.setValue(true); // This can be prevented because of checking Class
DataField dataField = new DataField<String>(null);
dataField.setValue(5); // This can not be prevented because of NullPointer Exception
我找到了這樣的解決方案: 如何使用類令牌保留嵌套泛型的泛型類型,但我不想兩次過度使用該類。我的另一個想法是使用像C#這樣的default(T)函數將My Value預設為特定值。類型。
感謝幫助
我使用seconde構造函數和類字段解決了它。
public DataField(T val) throws IllegalValueException {
if(val==null) throw new IllegalArgumentException("Class type couldn't be resolved from null");
_value =val;
_class=val.getClass();
_hasChanged=false;
_hasChangedObserverable=new ChildObserable<>();
}
public DataField(T val,Class<T> classType) throws IllegalValueException {
if(val!=null && val.getClass()!=classType) throw new IllegalArgumentException("Type of val and classType are Different");
_class=classType;
_value=val;
_hasChanged=false;
_hasChangedObserverable=new ChildObserable<>();
}
@Override
public void setValue(T value) throws IllegalValueException {
if(_class!= value.getClass()) throw new IllegalValueException();
if(value!=_value) {
_value = value;
_hasChanged=true;
_hasChangedObserverable.sendValue(_value);
}
}
感謝幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.