4

当我尝试覆盖方法时遇到 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;
    }
}

我可以将“Class”声明为“ClassOfRain”吗?如果是,怎么办?

感谢您的阅读!

4

4 回答 4

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方法,因此传递实际的类对象是没有用的。

于 2012-04-13T09:51:13.787 回答
0

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

于 2012-04-13T09:50:40.203 回答
0

Class<Rain.class>将举行Rain阶级的反思。但这不起作用,因为被覆盖的方法必须具有相同的形参,所以你必须使用Class<? extends Object>.

于 2012-04-13T09:51:11.247 回答
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;
    }
}  
于 2012-04-13T09:51:35.520 回答