gpt4 book ai didi

java - 从实现中捕获通用类型

转载 作者:行者123 更新时间:2023-11-30 03:29:55 25 4
gpt4 key购买 nike

在一些 Java 代码中,我有一个像这样的界面:

interface A<T> {
T produce();
compare(T x, T y);
}

我有不同的实现,例如:

class B extends A<int[]> {
int[] produce() {...}
compare(int[] x, int[] y) {...}
}

问题是如何捕获特定于实现的泛型类型。以下不起作用:

A<T> a = new B();
T x = a.produce();
T y = a.produce();
a.compare(x, y);

因为类型T当然不引用B内部的内容。 (事实上​​它并没有指代任何东西。)

有没有办法让T捕获B的泛型类型?

最佳答案

如果我能读懂字里行间的意思,我想你要问的是如何使这一部分变得特别通用:

T x = a.produce();
T y = a.produce();
a.compare(x, y);

答案通常是使用通用方法“绑定(bind)”类型参数:

private static <T> void produceAndCompare(A<T> a) {
T x = a.produce();
T y = a.produce();
a.compare(x, y);
}

然后你可以这样调用它:

produceAndCompare(new B());

如果它需要首先位于变量中:

A<?> a = getSomeA(); //could just return new B();
produceAndCompare(a);

关于java - 从实现中捕获通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29304404/

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