Java Syntax Error: The method Foo is undefined for the type Bar
Java Syntax Error: The method Foo is undefined for the type Bar
我在 java 一本书中找到了这个,想了解为什么我会收到如下所述的错误:
public class Wildcard<V> {
V value;
public Wildcard(V value) {
super();
this.value = value;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
public boolean sameObj(Wildcard<? extends V> v1, MyComparator<V> comparator) {
return comparator.compare(this.value, v1.value);
}
public static void main(String[] args) {
Wildcard<Integer> iTest = new Wildcard<Integer>(10);
Wildcard<Number> nTest = new Wildcard<Number>(10);
nTest.sameObject(iTest, new MyComparator<Number>() {
public boolean compare(Number o1, Number o2) {
return o1 == o2;
}
});
}
}
interface MyComparator<V> {
public boolean compare (V value,V value2) ;
}
第nTest.sameObject
行出现的语法错误是:
The method sameObject(Wildcard<Integer>, new MyComparator<Number>(){}) is undefined for the type Wildcard<Number>
由于在 class Wildcard
上调用方法 Number
,sameObject
函数的第一个参数可以是扩展 V
的任何参数(在本例中为数字),接下来出现的函数的参数应为 V
(在本例中为数字)。因此,它应该是一个合法的电话。为什么不是合法调用?
这可能是一个错字。 sameObj
!= sameObject
.
正如 col6y
指出的那样,您应该将 sameObj
方法重命名为 sameObject
。
作为进一步的改进,我建议您将方法的签名更改如下
public boolean sameObject(Wildcard<? extends V> v1, MyComparator<? super V> comparator)
然后遵循PECS(producer extends, consumer super)规则。在那种特定情况下,这使您能够使用为超类型 V
.
设计的比较器调用方法 sameObject
有关 PECS 的更多信息,您可以阅读 Joshua Bloch 的 Effective Java,或快速浏览 SO 上的 this question。
我在 java 一本书中找到了这个,想了解为什么我会收到如下所述的错误:
public class Wildcard<V> {
V value;
public Wildcard(V value) {
super();
this.value = value;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
public boolean sameObj(Wildcard<? extends V> v1, MyComparator<V> comparator) {
return comparator.compare(this.value, v1.value);
}
public static void main(String[] args) {
Wildcard<Integer> iTest = new Wildcard<Integer>(10);
Wildcard<Number> nTest = new Wildcard<Number>(10);
nTest.sameObject(iTest, new MyComparator<Number>() {
public boolean compare(Number o1, Number o2) {
return o1 == o2;
}
});
}
}
interface MyComparator<V> {
public boolean compare (V value,V value2) ;
}
第nTest.sameObject
行出现的语法错误是:
The method sameObject(Wildcard<Integer>, new MyComparator<Number>(){}) is undefined for the type Wildcard<Number>
由于在 class Wildcard
上调用方法 Number
,sameObject
函数的第一个参数可以是扩展 V
的任何参数(在本例中为数字),接下来出现的函数的参数应为 V
(在本例中为数字)。因此,它应该是一个合法的电话。为什么不是合法调用?
这可能是一个错字。 sameObj
!= sameObject
.
正如 col6y
指出的那样,您应该将 sameObj
方法重命名为 sameObject
。
作为进一步的改进,我建议您将方法的签名更改如下
public boolean sameObject(Wildcard<? extends V> v1, MyComparator<? super V> comparator)
然后遵循PECS(producer extends, consumer super)规则。在那种特定情况下,这使您能够使用为超类型 V
.
sameObject
有关 PECS 的更多信息,您可以阅读 Joshua Bloch 的 Effective Java,或快速浏览 SO 上的 this question。