在Java中有什么方法可以返回多态吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Java中有什么方法可以返回多态吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2746字,纯文字阅读大概需要4分钟。
内容图文
![在Java中有什么方法可以返回多态吗?](/upload/InfoBanner/zyjiaocheng/687/43532972607e43e5b8b66f9a09934028.jpg)
在Typescript中,有一个多态返回类型this的概念.
https://www.typescriptlang.org/docs/handbook/advanced-types.html#polymorphic-this-types
例:
export abstract class Animal {
private name: string;
public setName(name: string): this {
this.name = name;
return this;
}
}
export class Dog extends Animal {
private breed: string;
public setBreed(breed: string): this {
this.breed = breed;
return this;
}
}
export class FluffyDog extends Dog {
private fluffiness: number;
public setFluffiness(fluffiness: number): this {
this.fluffiness = fluffiness;
return this;
}
}
export class Main {
constructor() {
const dog: FluffyDog = new FluffyDog()
.setName('Fluffy')
.setFluffiness(10)
.setBreed('Lab');
}
}
Java有什么等效功能吗?
我想出的最好的是:
public abstract class Animal<T extends Animal<T>> {
private String name;
public T setName(String name) {
this.name = name;
return (T)this;
}
}
class Dog extends Animal<Dog> {
private String breed;
public Dog setBreed(String breed) {
this.breed = breed;
return this;
}
}
class Main {
static {
Dog dog = new Dog()
.setName("Fluffy")
.setBreed("Lab");
}
}
或这个:
public abstract class Animal {
private String name;
public <T extends Animal> T setName(String name) {
this.name = name;
return (T)this;
}
}
class Dog extends Animal {
private String breed;
public <T extends Dog> T setBreed(String breed) {
this.breed = breed;
return (T)this;
}
}
class FluffyDog extends Dog {
private Long fluffiness;
public <T extends FluffyDog> T setFluffiness(Long fluffiness) {
this.fluffiness = fluffiness;
return (T)this;
}
}
class Main {
static {
FluffyDog dog = new FluffyDog()
.<FluffyDog>setName("Fluffy")
.setFluffiness(10L)
.setBreed("Lab");
}
}
第一个似乎只能被继承一次.
在某些情况下,第二个要求显式类型参数.
在Java中有什么方法可以返回多态吗?
解决方法:
另外两个选择:
>由于设置方法的顺序无关紧要,因此从功能上讲,请按自下而上的顺序进行调用.如果先分配给变量,则无需强制转换.
final FluffyDog dog = new FluffyDog();
dog.setFluffiness(10)
.setBreed("Lab")
.setName("Fluffy");
>重写继承的setter方法以更改返回类型,使用super委托给实际的实现:
class Animal {
private String name;
public Animal setName(String name) {
this.name = name;
return this;
}
}
class Dog extends Animal {
private String breed;
@Override
public Dog setName(String name) {
super.setName(name);
return this;
}
public Dog setBreed(String breed) {
this.breed = breed;
return this;
}
}
class FluffyDog extends Dog {
private long fluffiness;
@Override
public FluffyDog setName(String name) {
super.setName(name);
return this;
}
@Override
public FluffyDog setBreed(String breed) {
super.setBreed(breed);
return this;
}
public FluffyDog setFluffiness(long fluffiness) {
this.fluffiness = fluffiness;
return this;
}
}
class Main {
public static void main(String[] args) throws Exception {
final FluffyDog dog = new FluffyDog()
.setName("Fluffy")
.setBreed("Lab")
.setFluffiness(10);
}
}
内容总结
以上是互联网集市为您收集整理的在Java中有什么方法可以返回多态吗?全部内容,希望文章能够帮你解决在Java中有什么方法可以返回多态吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。