Java方法重写,参数为;类别<;?扩展对象>&引用;

Java方法重写,参数为;类别<;?扩展对象>&引用;,java,Java,当我试图重写一个方法时,java出现了一个问题,我的代码如下: public abstract class CustomAdapter{ public abstract Boolean addItem(Class<? extends Object> aObject); } public class RainAdapter extends CustomAdapter { @Override public Boolean addItem(ClassOfRain

当我试图重写一个方法时,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;
    }
}
公共抽象类CustomAdapter{

公共抽象布尔加法项(类这是不可能的。方法重写意味着您放置了完全相同的方法头。唯一可以更改的是给定参数的名称。

Class
将保留
Rain
类的反射。但这不起作用,因为重写的方法必须具有相同的形式参数,因此您必须使用se
Class我想你有点困惑。你确定你不是想说:

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;
    }
}
公共抽象类CustomAdapter{
公共抽象布尔加法项(T AOObject);
}
公共类RainAdapter扩展了CustomAdapter{
@凌驾
公共布尔添加项(Rain aRainInfo){
//做点什么
返回true;
}
}

在我对类结构的解释中,您试图创建一个泛型的
addItem
方法,因此传递实际的类对象是没有用的。

在实现抽象/接口方法和/或覆盖时,方法签名必须匹配……您可以这样做

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;
    }
}  
等级