【发布时间】:2018-08-01 10:09:06
【问题描述】:
所以我有一个用例,我需要复制classes 的object(类可能因工厂中的输入类型而异。
这是我正在尝试做的一个示例
public interface DataUtil {
// the main wrapper
static Object copyObject(Object payload){
if(payload instanceof Human))
return copyEntry((Human) payload);
if(payload instanceof Car))
return copyEntry((Car) payload);
if(payload instanceof Planet))
return copyEntry((Planet) payload);
return payload;
}
static Human copyEntry(Human human) {
return Human.builder()
.name(human.getName())
.age(human.getAge())
.build();
}
static Car copyEntry(Car car) {
return Car.builder()
.model(car.getModel())
.brand(car.getBrand())
.build();
}
static Planet copyEntry(Planet planet) {
// return builder like previous
}
}
如果您查看copyObject 函数,它会按预期完成工作,但他的问题是返回类型。目前,为了使其自身兼容,它返回一个Object,但我更愿意返回它特定的类对象(例如Human 或Car)
有没有办法通过泛型(使用<T>)来完成这项工作?或者这首先是一个不好的方法?
【问题讨论】:
-
复制构造函数怎么样?
-
@MuratK。 :我希望
copy发生在util内,所以要避免这种方法! -
目前你不需要这个类。只需提供一个复制构造函数并调用
new Human(human)。 -
实际问题是
Human/Car等是不受我控制的代码库,它们没有copyconst的这种功能,因此所有这些都是混乱的。这就是为什么我想在Util中包含它:| -
你应该得到一个可以为你进行克隆的库,这样你就不必浪费时间编写(坏的)代码了。它们也完全通用!