我有以下方法。我想知道T是否有超类,如果有,就调用超类的cloneEntity方法
public Clone(Class<T> typeParameterClass) {
this.typeParameterClass = typeParameterClass;
}
public T cloneEntity(){
T clonedEntity = typeParameterClass.newInstance();
Class superClass = typeParameterClass.getSuperclass();
if(superClass != null){
//call clone method of the superclass to copy superclass properties
?????????
}
}更多解释
我并不是要实例化超类。我正在尝试创建一个say Address的实例。Address扩展了BaseEntity,并有一个deepCopy()方法。BaseEntity本身有一个deepCopy()方法。创建Address的实例后,我想先对Address调用deepCopy()方法,然后对超类BaseEntity调用
更多解释
我想去掉每个对象中的deepCopy()方法,比如Address、User等,并创建一个泛型对象。因此,T可以是Address或User,但我想在泛型实现中调用T的超类
发布于 2011-03-03 05:13:46
没有显式检查任何东西的每个类都将java.lang.Object作为超类(接口和原语不是类),因此检查并不是您认为的那样。
如果你想检查一个类是否实现了cloneable,你可以这样做:
Cloneable.class.isAssignableFrom( YourType.class );发布于 2011-03-03 05:43:11
既然您已经创建了一个类的实例,那么一个糟糕的旧instanceof和一个强制转换就可以解决这个问题。然而,反思几乎从来都不是正确的答案。
发布于 2011-03-03 05:47:46
首先,在超类上调用clone()需要一些反射技巧,因为clone()在Object中是受保护的。
但是在Object中定义的旧式clone() (并在Cloneable中记录)有什么问题呢?这涉及到总是调用super.clone(),所以对于您的情况应该没问题。
您只需要一个将clone()声明为公共的接口,然后您的T应该看起来像<T extends ThatInterface>。您还可以有一个实现ThatInterface并为clone()提供默认实现的抽象类--就像您试图在发布的代码中实现的那样。
https://stackoverflow.com/questions/5173532
复制相似问题