-
有两个类型参数
T
和
S
S公司
是的超类
T型
-
有一个实例
t
属于
T型
-
创建新实例
s
属于
,
-
填充的所有字段
内容包括
t型
.
public static <T extends S, S> S copyAs(T t, Class<S> sClass) {
S s = sClass.newInstance();
for (Field f : getAllFields(sClass)) {
f.setAccessible(true);
f.set(s, f.get(t));
}
return s;
}
private static Collection<Field> getAllFields(Class<?> cls) {
Collection<Field> fields = new ArrayList<Field>();
while (cls != Object.class)
{
fields.addAll(Arrays.asList(cls.getDeclaredFields()));
cls = cls.getSuperclass();
}
return fields;
}
这很管用。
为了方便起见-如果我想复制同一个类-
copyAs(myInstance, MyClass.class)
如果
myInstance
属于类型
MyClass
我该怎么做?这有可能吗?
我试过两种方法都不管用:
public static <T> T copy(T t) {
return copyAs(t, T.class);
// error: .class cannot be used on type parameter
}
和
public static <T> copy(T t) {
return copyAs(t, t.getClass());
// error: t.getClass() gives Class<? extends Object>, not Class<T>
}