gpt4 book ai didi

java - 我可以以某种方式部分实现单个类的一堆泛型吗

转载 作者:行者123 更新时间:2023-11-30 07:07:56 24 4
gpt4 key购买 nike

我可以以某种方式部分实现单个类的一堆泛型吗?我想要实现的是,只有当有人真正依赖于该类型时,我才能接受泛型。请参阅以下 foo/bar 示例以演示我正在寻找的内容:

import java.util.Date;

public class Sample {
public static abstract class ASomeFunc<AK, AV, PK, PV> {

public void forwardTo(ASomeFunc<?, ?, PK, PV> lala) {

}

// EDIT 1:
// we do some logic here and then pass a map entry to an actual implementation
// but somethimes I do not care what the key is I am just interested in what the value is
// public abstract Map.Entry<PK, PV> compute(Map.Entry<AK, AV> data);
}

public static class SomeFunc2 extends ASomeFunc<Date, String, Number, Number> {

}


// what I would like to do:
// public static class SomeOtherFunc extends ASomeFunc<?, Number, ?, Number> {
// but I ony can:
public static class SomeOtherFunc extends ASomeFunc<Object, Number, Object, Number> {

}

public static void main(String[] args) {
// but this now clashes ... sinc object is explicitly defined
new SomeFunc2().forwardTo(new SomeOtherFunc());
}
}

最佳答案

? 也不起作用,倒数第二个类型参数必须恰好是 Number (因为泛型是不变的)。

您也许可以通过一些未经检查的强制转换来绕过它(一个丑陋的解决方案)。或者,如果 PK 是消费者类型,请使用:

forwardTo(ASomeFunc<?, ?, ? super PK, PV> lala)

这也将使您的示例编译。 (另请参阅 PECS )

但是您的情况意味着您仅使用子类实现了 ASomeFunc 接口(interface)的一部分。

在这种情况下,您确实应该尝试拆分 ASomeFunc 的接口(interface),以便每个子类可以准确选择它们需要实现的内容,但仅此而已。

关于java - 我可以以某种方式部分实现单个类的一堆泛型吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39767303/

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