java如何防止元素<Integer>变成元素<Object>
为了与一些硬件同步,我创建了一个包含泛型类的数据模型 用于在HashMap中存储不同类型对象的数据字段。 HashMapMyDictionary
现在我发现,如果我将一个数据字段存储到一个数据字段中,就可以在该数据字段中保存一个字符串。 有没有办法防止这种情况发生
这是我的密码:
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
我找到了一些类似这样的解决方案How to keep generic type of nested generics with class tokens 但是我不喜欢给学生两次过高的分数 我的另一个想法是使用默认(T)函数(如C#)将我的值预设为特定类型
谢谢你的帮助
# 1 楼答案
我用第二个构造函数和一个类字段解决了这个问题
谢谢你的帮助