对于我的Android应用,我想阅读Raspberry Pi的温度。从服务器中,变量作为双重返回。从XML中,它作为字符串返回。因此,我想为什么我不制作一个通用的设置器,如果它是字符串或double,则可以设置该值。
@Bindable
public String getCPUTemperature(){
return Double.toString(mCPUTemp);
}
/**
* Sets the CPU temperature for the device view model.
* @param <T> The generic parameter T accepts a String as wel as a Double to set the available memory.
*/
public <T> void setCPUTemperature(T CPUTemp){
if(CPUTemp.getClass().equals(String.class))
this.mCPUTemp = Double.parseDouble((String)CPUTemp);
else if(CPUTemp.getClass().equals(Double.class))
this.mCPUTemp = (double)CPUTemp;
notifyPropertyChanged(BR.cPUTemperature);
}
,但是在我创建此设置器后,我发现了:
注意:数组和通用类型(例如可观察类)可能会在没有错误时显示错误。
所以我开始怀疑。是否可以使用通用变量求解它,如果是的,那是解决该问题的最佳方法吗?
这听起来像是该注释与Android Studio支持数据绑定有关。Android Studio对数据绑定的支持仍在改善。当代码编译并运行正常时,有时会显示警告或红色强调。
您正在做的事情将有效。您当前的方法根本不使用T
,因此可能是Object
。我认为您不会从使用仿制药中获得任何真正的优势。
您无需仿制药就可以做到这一点,我认为它看起来更好:
public void setCPUTemperature(String CPUTemp){
this.mCPUTemp = Double.parseDouble((String)CPUTemp);
notifyPropertyChanged(BR.cPUTemperature);
}
public void setCPUTemperature(double CPUTemp){
this.mCPUTemp = CPUTemp;
notifyPropertyChanged(BR.cPUTemperature);
}
还有其他选择。例如,您只能在XML中使用double,然后在XML中进行快速的字符串转换:
public double getCPUTemperature(){
return this.mCPUTemp;
}
public void setCPUTemperature(double CPUTemp){
this.mCPUTemp = CPUTemp;
notifyPropertyChanged(BR.cPUTemperature);
}
,然后在xml中:
<TextView android:text='@{"" + model.cPUTemperature}' .../>
<TextView android:text="@{Double.toString(model.cPUTemperature)}" .../>
<TextView android:text="@{@string/tempFormat(model.cPUTemperature)}" .../>
如果是我的应用程序,我会选择@string/tempFormat
选项,以便可以轻松地更改双重的格式。我更喜欢避免在代码中进行硬编码格式,而XML是一个更好的地方。