gpt4 book ai didi

java - 奇怪的 Java 泛型编译错误 : parameterized method is not applicable for same parameterized types?

转载 作者:行者123 更新时间:2023-11-29 03:37:51 27 4
gpt4 key购买 nike

我偶然发现了这个错误,但找不到问题所在:

The method compute(Set<String>, Set<String>) 
in the type JaccardSimilarity<String> is not applicable
for the arguments (Set<String>, Set<String>)

有问题的方法是使用泛型:

public class JaccardSimilarity<E> implements SimilarityMeasure<Set<E>, Set<E>> {

@Override
public double compute(Set<E> s1, Set<E> s2){
// compute some stuff
return unionSize == 0 ? 1 : intersectionSize / (double)unionSize;
}
}

我在类里面这样调用它:

public MyClass {
private JaccardSimilarity<String> sim = new JaccardSimilarity<String>();

public void calc() {
Set<String> s1 = new HashSet<>();
s1.add("hallo welt");
Set<String> s2 = new HashSet<>();
s2.add("hallo welt");
// the line below throws the error..
double result = sim.compute(s1, s2);
}

以我对 Java 泛型的拙劣理解,这是完全有效的代码...

这怎么可能?

编辑 - 附加代码:

public interface SimilarityMeasure<Q, R> extends RelevanceFunction<Q, R> {}

和..

public interface RelevanceFunction<Q, R> {
public double compute(Q v1, R v2);
}

编辑 2:这是导入:

import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;

import <redacted>.JaccardSimilarity;

编辑 3:这是错误:

import <redacted>.representation.Set;

微妙的...

最佳答案

您可能正在导入不同的类。 SetString .

仔细检查您的导入!

也可以考虑使用 Set<? extends E>在您的实现中。那么E如果它满足其他要求,则只需是您使用的实际类型的父类(super class)型即可。

关于java - 奇怪的 Java 泛型编译错误 : parameterized method is not applicable for same parameterized types?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567798/

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