简体   繁体   English

Java方法覆盖参数“Class <? extends Object>“

[英]Java Method override with the parameter “Class<? extends Object>”

I got a problem with java when i try to override a method,my code is following: 当我尝试覆盖一个方法时,我遇到了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;
    }
}

Can I declare the the "Class" to "ClassOfRain"? 我可以将“Class”声明为“ClassOfRain”吗? If yes,how to do? 如果有,该怎么办?

Thanks for your reading! 谢谢你的阅读!

I think you are a bit confused. 我觉得你有点困惑。 Are you sure you are not trying to say: 你确定你不是想说:

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

In my interpretation of your class structure, you are trying to make a generic addItem method, so passing around the actual class object is of no use. 在我对您的类结构的解释中,您正在尝试创建一个通用的addItem方法,因此传递实际的类对象是没有用的。

That is not possible. 这是不可能的。 A method override means that you put exactly the same method header. 方法覆盖意味着您放置完全相同的方法标头。 Only thing you can change is the name of the given parameter. 您唯一可以更改的是给定参数的名称。

Class<Rain.class> would hold the reflection of Rain class. Class<Rain.class>将包含Rain类的反射。 But this will not work, because overridden methods must have the same formal parameters, so you'll have to use Class<? extends Object> 但这不起作用,因为重写的方法必须具有相同的形式参数,所以你必须使用Class<? extends Object> Class<? extends Object> . Class<? extends Object>

the method signatures must match when implementing abstract/interface methods and/or overwriting ... you could do something like this tho 实现抽象/接口方法和/或覆盖时,方法签名必须匹配...你可以做这样的事情

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM