2016-04-06 75 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()