public static class DataBean {
private int value;
private BigDecimal name;}
public class ChartData {
private Integer time;
private BigDecimal result;}
我需要類似如下的操作,
List<ChartData> data = getdata();
List<SeriesBean.DataBean> yValue = data.stream().map(item -> (SeriesBean.DataBean) item);
報錯不可轉換的型別,DataBean是個內部靜態類別。
C 裡面有reinterpret_cast可以強轉,java應該有對應的方法的
大家讲道理2017-05-17 10:09:31
Apache Commons 的BeanUtils
和 Spring 的 BeanUtils
都有提供 copyProperties
和Spring 的
copyProperties
方法,作用是將一個對象的屬性的值賦值給另外一個對象,但前提是兩個對象的屬性類型且名字BeanUtils
相同。
例如使用 Apache Commons 的 :
import java.math.BigDecimal;
import org.apache.commons.beanutils.BeanUtils;
public class TestBeanUtils {
public static void main(String[] args) throws Exception {
ChartData src = new ChartData(1, BigDecimal.valueOf(123));
DataBean dest = new DataBean();
BeanUtils.copyProperties(dest, src);
System.out.println(src);
System.out.println(dest);
}
public static class DataBean {
private int time;
private BigDecimal result;
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public BigDecimal getResult() {
return result;
}
public void setResult(BigDecimal result) {
this.result = result;
}
@Override
public String toString() {
return "DataBean{" + "time=" + time + ", result=" + result + '}';
}
}
public static class ChartData {
private Integer time;
private BigDecimal result;
public ChartData(Integer time, BigDecimal result) {
this.time = time;
this.result = result;
}
public Integer getTime() {
return time;
}
public BigDecimal getResult() {
return result;
}
public void setTime(Integer time) {
this.time = time;
}
public void setResult(BigDecimal result) {
this.result = result;
}
@Override
public String toString() {
return "ChartData{" + "time=" + time + ", result=" + result + '}';
}
}
}
ChartData
和 DataBean
所以如果
的屬性名稱一致,你的程式碼可以這樣寫(就不用挨個屬性的寫 setter 方法了):🎜List<ChartData> data = getdata();
List<DataBean> yValue = new ArrayList<>(data.size());
for (ChartData item : data) {
DataBean bean = new DataBean();
BeanUtils.copyProperties(bean, item);
yValue.add(bean);
}
🎜當然,要注意的一點是,這是使用反射實現的,效率要比直接寫 setter 方法要低一些。 🎜