首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java如何调用T(泛型)的超类方法

java如何调用T(泛型)的超类方法
EN

Stack Overflow用户
提问于 2011-03-03 05:11:35
回答 3查看 636关注 0票数 0

我有以下方法。我想知道T是否有超类,如果有,就调用超类的cloneEntity方法

代码语言:javascript
复制
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的超类

EN

回答 3

Stack Overflow用户

发布于 2011-03-03 05:13:46

没有显式检查任何东西的每个类都将java.lang.Object作为超类(接口和原语不是类),因此检查并不是您认为的那样。

如果你想检查一个类是否实现了cloneable,你可以这样做:

代码语言:javascript
复制
Cloneable.class.isAssignableFrom( YourType.class );
票数 2
EN

Stack Overflow用户

发布于 2011-03-03 05:43:11

既然您已经创建了一个类的实例,那么一个糟糕的旧instanceof和一个强制转换就可以解决这个问题。然而,反思几乎从来都不是正确的答案。

票数 0
EN

Stack Overflow用户

发布于 2011-03-03 05:47:46

首先,在超类上调用clone()需要一些反射技巧,因为clone()在Object中是受保护的。

但是在Object中定义的旧式clone() (并在Cloneable中记录)有什么问题呢?这涉及到总是调用super.clone(),所以对于您的情况应该没问题。

您只需要一个将clone()声明为公共的接口,然后您的T应该看起来像<T extends ThatInterface>。您还可以有一个实现ThatInterface并为clone()提供默认实现的抽象类--就像您试图在发布的代码中实现的那样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5173532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档