gpt4 book ai didi

java - 使使用泛型的类的方法能够返回其自身及其子类实例

转载 作者:行者123 更新时间:2023-11-30 01:45:21 25 4
gpt4 key购买 nike

我实现了以下 Java 类:

public class Data<T> {

private List<T> data;

public List<T> getData() {
return this.data;
}


public Data<T> setData(List<T> data) {
this.data = data;
return this;
}

public Data<T> getAsNullIfEmpty() {
if (this.data == null || this.data.isEmpty())
return null;
return this;
}

}
public class IntegerData extends Data<Integer> {}

我想要getAsNullIfEmpty()方法能够被其子类实例调用。

线路IntegerData integerData = new IntegerData().getAsNullIfEmpty();抛出以下编译错误: incompatible types: Data<java.lang.Integer> cannot be converted to IntegerData

我尝试更改方法的主体 getAsNullIfEmpty()对此:

public <E extends Data<T>> E getAsNullIfEmpty() {
if (this.data == null || this.data.isEmpty())
return null;
return this;
}

这不会编译,因为 Data<T>不扩展自身。有没有一种方法可以完成此任务,而无需重复重写每个子类中的方法或使用显式强制转换?

最佳答案

您需要“常用”技巧来让类的泛型引用自身,以及不安全的强制转换。

public class Data<T, D extends Data<T, D>> {

private List<T> data;

public List<T> getData() {
return this.data;
}


public D setData(List<T> data) {
this.data = data;
return (D) this;
}

public D getAsNullIfEmpty() {
if (this.data == null || this.data.isEmpty())
return null;
return (D) this;
}

}
public class IntegerData extends Data<Integer, IntegerData> { ... }

关于java - 使使用泛型的类的方法能够返回其自身及其子类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58243305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com