2012-04-13 50 views
4

我用java一个问题,当我试图覆盖一个方法,我的代码如下:的Java方法重写与参数“类<?扩展对象>”

public abstract class CustomAdapter{ 
    public abstract Boolean addItem(Class<? extends Object> aObject); 
} 

public class RainAdapter extends CustomAdapter { 
    @Override 
    public Boolean addItem(ClassOfRain aRainInfo) { 
     // do something 
    return true; 
    } 
} 

我可以声明“类“到”ClassOfRain“? 如果是,该怎么办?

感谢您的阅读!

+1

类<?扩展对象>没有任何意义,因为所有的Java类扩展对象... – MarioDS 2012-04-13 09:49:44

回答

5

我觉得你有点困惑。你确定你是不是想说:

public abstract class CustomAdapter<T extends Object> { 
    public abstract Boolean addItem(T aObject); 
} 

public class RainAdapter extends CustomAdapter<Rain> { 
    @Override 
    public Boolean addItem(Rain aRainInfo) { 
     // do something 
     return true; 
    } 
} 

在我的阶级结构的解释,你正试图使通用addItem方法,所以绕过实际的类的对象是没有用的。实现抽象/接口方法和/或覆盖时

+0

谢谢你的回答! – 2012-04-13 09:58:41

0

这是不可能的。方法覆盖意味着您放置完全相同的方法头。唯一可以改变的是给定参数的名称。

0

Class<Rain.class>将持有Rain类的反映。但这不起作用,因为重写的方法必须具有相同的形式参数,所以您必须使用Class<? extends Object>

0

方法签名必须匹配...你可以做这样的事情寿

public abstract class CustomAdapter{ 
    public abstract Boolean addItem(Object o); 
} 

public class RainAdapter extends CustomAdapter { 

    public Boolean addItem(Object o){ 
     if (o.getClassName().equals("ClassOfRain")){ 
      return this.addItem((ClassOfRain) o); 
     } 
     return false; 
    } 
    private Boolean addItem(ClassOfRain aRainInfo) { 
     // do something 
     return true; 
    } 
}