2016-04-06 76 views
1

这是我的程序的源代码。在第22行中,在函数sameValue(Gen ob)中,有一个错误,它说找不到符号'ob'。我没有理解,为什么?在通配符中找不到符号

class Gen1<T extends Number> 
{ 
    T o; 

    Gen1(T o) 
    { 
     this.o = o; 
    } 

    String getType() 
    { 
     return o.getClass().getName(); 
    } 

    double getValue() 
    { 
     return o.doubleValue(); 
    } 

    boolean sameValue(Gen1 <?> ob) 
    { 
     double x = ob.doubleValue(); 
     if (getValue() == x) 
      return true; 
     else 
     return false; 
    } 
} 

class Gen1Example{ 

    public static void main(String[] argv) 
    { 
     Gen1<Integer> o1 =new Gen1<Integer>(120); 
     System.out.println(o1.getType()); 
     Gen1<Double> o2 =new Gen1<Double>(120.0); 
     System.out.println(o2.getType()); 
     //Gen1<String> o2 =new Gen1<String>("This is a test"); 
     //System.out.println(o2.getType()); 
     System.out.println(o1.getValue()); 
     System.out.println(o2.getValue()); 
     System.out.println(o1.sameValue(o2)); 
    } 
} 
+4

您的'Gen1'类没有'doubleValue'方法。 – Savior

回答

0

只是因为T扩展Number类并不意味着Gen1一样。您可能想要类似ob.getValue()(或ob.o.doubleValue(),但这暴露了实施细节)。

1

您误读了错误信息。它说

Gen1Example.java:22: error: cannot find symbol 
     double x = ob.doubleValue(); 
       ^
    symbol: method doubleValue() 
    location: variable ob of type Gen1<?> 
1 error 

它抱怨说,在Gen1<?>类型的ob有没有方法doubleValue。 你可能意思是ob.getValue()