java-实现接口方法的类(没有显式实现该接口)是否扩展了该特定接口?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-实现接口方法的类(没有显式实现该接口)是否扩展了该特定接口?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1335字,纯文字阅读大概需要2分钟。
内容图文
![java-实现接口方法的类(没有显式实现该接口)是否扩展了该特定接口?](/upload/InfoBanner/zyjiaocheng/687/afe17998dc9b4e31b79dbb212c2b2de3.jpg)
我正在实现一个类来存储可以分配双精度值的对象.因此,我创建了一个HasDoubleValue接口,其中包含一个方法:
public interface HasDoubleValue{
public double doubleValue();
}
我的主类定义如下:
Data <O extends HasDoubleValue> {...}
现在,当我尝试初始化此类以存储Integer时,尽管默认情况下Integer实现了doubleValue()方法,但我收到“类型参数Integer不在类型变量O的范围内”的错误.
我想发生这种情况是因为Integer尽管具有我正在寻找的方法,但并未明确实现我的HasDoubleValue接口.这是正确的吗?什么是自然的解决方法?
解决方法:
是的,没错. Java不使用鸭式输入作为JavaScript或TypeScript.
一种解决方案是创建一个包装Integer的适配器类,委托给它,并实际实现该接口.
或者,由于在这种情况下,您的接口是功能接口,因此可以使用lambda或方法引用从Integer创建HasDoubleValue的实例.
public interface HasDoubleValue{
double doubleValue();
}
final class IntegerHasDoubleValueAdapter implements HasDoubleValue {
private final Integer i;
public IntegerHasDoubleValueAdapter(Integer i) {
this.i = i;
}
@Override
public double doubleValue() {
return i.doubleValue();
}
}
class Data<O extends HasDoubleValue> {
void put(O o) {}
public static void main(String[] args) {
Integer i = 42;
Data<IntegerHasDoubleValueAdapter> d1 = new Data<>();
d1.put(new IntegerHasDoubleValueAdapter(i));
Data<HasDoubleValue> d2 = new Data<>();
d2.put(() -> i.doubleValue());
Data<HasDoubleValue> d3 = new Data<>();
d3.put(i::doubleValue);
}
}
内容总结
以上是互联网集市为您收集整理的java-实现接口方法的类(没有显式实现该接口)是否扩展了该特定接口?全部内容,希望文章能够帮你解决java-实现接口方法的类(没有显式实现该接口)是否扩展了该特定接口?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。