Java – 继承Fluent方法返回类型以返回事件类的类型,而不是父类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java – 继承Fluent方法返回类型以返回事件类的类型,而不是父类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1433字,纯文字阅读大概需要3分钟。
内容图文
![Java – 继承Fluent方法返回类型以返回事件类的类型,而不是父类](/upload/InfoBanner/zyjiaocheng/826/e524796b479d4be2a383678855b142d0.jpg)
当您采用流畅的方法时,您可能会遇到以下情况:
public class Foo<T extends a>{
public Foo<T> someMethod(){
System.out.println("foo");
return this;
}
}
public class Bar<T extends b> extends Foo<T> {
public Bar<T> barMethod(){
System.out.println("bar");
return this;
}
}
public class a{}
public class b extends a{}
一个流畅的接口的优点是你可以链接方法调用,但是当Bar继承了someMethod()时,返回类型是Foo not Bar会破坏以下链:
new Bar<b>().someMethod().barMethod();
一个答案可能是为每个继承的方法添加@Overrides,这样Bar就有了另外的方法:
@Override
public Bar<T> someMethod(){
System.out.println("foo");
return this;
}
但是在大型类和扩展类层次结构中,这肯定会证明一堆乱码?!是否有适当的返回类型来提供流畅的方法,其中每个继承它的类都将返回其特定类型的对象(这样我们可以链接没有强制转换的方法)?
我试过了:
public <U extends Foo<T>> U someMethod(){
System.out.println("foo");
return this;
}
唉,没有用.我希望有人知道这个问题的简单而优雅的解决方案.该项目很大,因此如果可能,它需要可维护和可扩展.
感谢您在此方案中提供的任何帮助.
解决方法:
你可以这样做,如果你不介意未经检查的演员:
public class Foo<T, F extends Foo<T, F>> {
public F someMethod() {
System.out.println("foo");
return (F) this; // <--- That's the unchecked cast! Tucked safely away.
}
public static void main(String[] args) {
new Bar<String>().someMethod().barMethod();
}
}
class Bar<T> extends Foo<T, Bar<T>> {
public Bar<T> barMethod() {
System.out.println("bar");
return this;
}
}
就个人而言,我为整个项目全局禁用未经检查的投射警告.
内容总结
以上是互联网集市为您收集整理的Java – 继承Fluent方法返回类型以返回事件类的类型,而不是父类全部内容,希望文章能够帮你解决Java – 继承Fluent方法返回类型以返回事件类的类型,而不是父类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。