奇怪的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;