奇怪的Java泛型编译错误:参数化方法不适用于相同的参数化类型?

奇怪的Java泛型编译错误:参数化方法不适用于相同的参数化类型?,java,generics,Java,Generics,我偶然发现了这个错误,但我找不到问题: The method compute(Set<String>, Set<String>) in the type JaccardSimilarity<String> is not applicable for the arguments (Set<String>, Set<String>) 方法计算(Set,Set) 在类型中,相似性不适用 对于参数(Set,Set) 所讨论的方法是使用泛

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

The method compute(Set<String>, Set<String>) 
in the type JaccardSimilarity<String> is not applicable 
for the arguments (Set<String>, Set<String>)
方法计算(Set,Set)
在类型中,相似性不适用
对于参数(Set,Set)
所讨论的方法是使用泛型:

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类实现相似性度量{
@凌驾
公共双计算(集s1、集s2){
//计算一些东西
返回unionSize==0?1:intersectionSize/(双)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);
    }
公共MyClass{
private JaccardSimilarity=新JaccardSimilarity();
公共无效计算(){
Set s1=新的HashSet();
s1.添加(“哈罗贴边”);
Set s2=新的HashSet();
s2.添加(“哈罗贴边”);
//下面的行抛出错误。。
双结果=模拟计算(s1,s2);
}
以我对Java泛型的拙劣理解,这是非常有效的代码

这怎么可能

编辑-其他代码:

public interface SimilarityMeasure<Q, R> extends RelevanceFunction<Q, R> {}
公共接口相似性度量扩展了相关函数{}

公共接口相关函数{
公共双计算(qv1,rv2);
}
编辑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;
导入java.io.File;
导入java.io.IOException;
导入java.util.HashSet;
导入java.util.Iterator;
导入java.util.List;
导入java.util.Set;
导入org.codehaus.jackson.JsonNode;
导入org.codehaus.jackson.map.ObjectMapper;
进口.相似性;
编辑3:这是错误:

import <redacted>.representation.Set;
import.representation.Set;

微妙…

您可能正在导入不同的类。对于
Set
String

仔细检查你的进口


也可以考虑使用<代码> SET

您可能正在导入不同的类。对于<代码> SET<代码>或<代码>字符串< /代码> .< 仔细检查你的进口


也可以考虑使用<代码> SET,您能提供一个最小的完整的示例来演示这个问题吗?您的导入语句可能是相关的。添加了所有其他相关类和导入语句。我不知道如何构造具有抽象类和接口的单个文件示例。rk.请在JaccardSimilarity中添加导入-这是导入错误可能出现的最后一个位置。您是否可以提供一个最小的完整示例来演示问题?您的导入语句可能是相关的。添加了所有其他相关类和导入语句。我不确定如何使用抽象类和但是,如果将代码放入sperate文件中,它应该会起作用。请在JaccardSimilarity中添加导入-这是导入错误最不可能出现的地方,这很有帮助-但是当另一个导入集定义为以下内容时,它不应该起作用:

public class Set extends Representation implements Iterable,java.util.Set{ <代码> >从答案:考虑使用<代码> SET避免重载类名,如<代码> SET>代码>它们必然会引起混淆。例如,假设您在<代码> JACK相似性< /代码>中有错误的<代码>设置<代码>,<代码> HasStute可能不实现其他<代码> SET。哦,这不是我的代码。关于导入和Eclipse的课程…再次感谢!谢谢,这很有帮助-但是当另一个导入集定义为以下内容时,它不应该起作用:
public class Set extends Representation implements Iterable,java.util.Set{ <代码> >从答案:考虑使用<代码> SET避免重载类名,如<代码> SET>代码>它们必然会引起混淆。例如,假设您在<代码> JACK相似性< /代码>中有错误的<代码>设置<代码>,<代码> HasStute可能不实现其他<代码> SET。哦,这不是我的代码。关于导入和Eclipse的课程…再次感谢!
import <redacted>.representation.Set;