通配符中未找到符号错误

时间:2016-04-06 18:49:06

标签: java wildcard

这是我的程序的源代码..在第22行,在函数sameValue(Gen ob)中,有一个错误,表示无法找到符号' ob&# 39 ;.我没有得到,为什么?

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));
    }
}

2 个答案:

答案 0 :(得分:1)

您误读了错误消息。它说

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

它抱怨ob类型Gen1<?>中没有方法doubleValue。 你可能意味着ob.getValue()

答案 1 :(得分:0)

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