[英]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.