gpt4 book ai didi

java - 指定扩展类的通用类型参数?

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:10 24 4
gpt4 key购买 nike

我想要一个实现接口(interface)的类,它指定特定的子类作为参数。

public abstract Task implements TaskStatus<Task> {
TaskStatus<T> listener;

protected complete() {
// ugly, unsafe cast
callback.complete((T) this);
}
}

public interface TaskStatus<T> {
public void complete(T task);
}

但是我想保证使用的类型参数是扩展这个的特定类的类型参数,而不仅仅是任务或 。

所以我想到的最好的办法是:

public abstract Task<T extends Task> implements TaskStatus<T> {
}

你可以通过写来扩展它:

public class MyTask extends Task<MyTask> {
}

但这也是有效的:

public class MyTask extends Task<SomeOtherTask> {
}

回调的调用将因 ClassCastException 而爆炸。那么,这种方法是错误和错误的,还是有一种我不知何故错过的正确方法?

最佳答案

不清楚您在 Task 中要做什么.但是,如果您定义通用类 Task<T>如下:

class Task<T extends Task<T>> { ... }

有以下两种可能:

class MyTask extends Task<MyTask> { ... }
class YourTask extends Task<MyTask> { ... }

但以下内容是被禁止的:

class MyTask extends Task<String> { ... }

Task的上述定义使用 F-bounded 多态性,这是一个相当高级的特性。您可以查看研究论文“F-bounded polymorphism for object-oriented programming”了解更多信息。

关于java - 指定扩展类的通用类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/153994/

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