java – 如何声明一个包含实现接口的类的子类的变量?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何声明一个包含实现接口的类的子类的变量?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1417字,纯文字阅读大概需要3分钟。
内容图文
![java – 如何声明一个包含实现接口的类的子类的变量?](/upload/InfoBanner/zyjiaocheng/742/69d59c71dc9743419c6e60ef95f01721.jpg)
我想声明一个包含实现特定接口的类的变量.具体来说,我正在尝试将SocketChannel和DatagramChannel存储在同一属性中,以便我可以互换使用它们.这两个类都扩展了SelectableChannel并实现了ByteChannel,我希望从两者中调用方法.我不想将它存储在两个单独的变量中,因为我需要将它们作为同一个对象.我想在一个变量中将此对象传递给构造函数.
甚至可以这样做吗?如果没有,那么仍然支持这种模型的常见解决方法是什么?为清楚起见,这里是(不正确的)声明可以描述我正在尝试做什么,如果它们有效:
private SelectableChannel & ByteChannel byteChannel; private SelectableChannel implements ByteChannel byteChannel; private ? extends SelectableChannel implements ByteChannel byteChannel;
请注意:
我不是在寻找其他方法来处理避免此问题的网络,或其他实现网络的方法.这个问题是关于声明一个变量来保存一个类的子类,该类也实现了一个特定的接口.我只给出了详细信息,以便您知道我无法创建新的接口或子类,因为在这种情况下,所涉及的所有类都是java.nio包的一部分.
解决方法:
Java中没有办法按照您希望的方式声明变量.
您可以使用SelectableChannel作为变量的类型(因为这是SocketChannel和DatagramChannel的超类型),并在需要从该接口调用方法时将其强制转换为ByteChannel.简单的例子:
class MyClass {
private SelectableChannel channel; // either a SocketChannel or a DatagramChannel
public int readStuff(ByteBuffer buffer) {
// Cast it to a ByteChannel when necessary
return ((ByteChannel) channel).read(buffer);
}
}
(或者反过来说:将变量声明为ByteChannel并在必要时强制转换为SelectableChannel – 在您的情况下更方便).
内容总结
以上是互联网集市为您收集整理的java – 如何声明一个包含实现接口的类的子类的变量?全部内容,希望文章能够帮你解决java – 如何声明一个包含实现接口的类的子类的变量?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。