参数化java类方法的未解决编译问题

参数化java类方法的未解决编译问题,java,generics,Java,Generics,我试图检查NumberFxn类中num对象和ob对象的相等性 它显示此编译错误: Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method doubleValue() is undefined for the type NumberFxn<capture#4-of ?> at NumberFxn.absEqual(Generics

我试图检查
NumberFxn
类中
num
对象和
ob
对象的相等性

它显示此编译错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method doubleValue() is undefined for the type NumberFxn<capture#4-of ?>

    at NumberFxn.absEqual(GenericsDemo.java:53)
    at GenericsDemo.main(GenericsDemo.java:74)
线程“main”java.lang中出现异常。错误:未解决的编译问题: 类型NumberFxn的方法doubleValue()未定义 在NumberFxn.absEqual(GenericsDemo.java:53) 位于GenericsDemo.main(GenericsDemo.java:74)
类号fxn{
T数;
公共编号fxn(T num){
//TODO自动生成的构造函数存根
this.num=num;
}
公共布尔值absEqual(NumberFxn ob){
if(Math.abs(ob.doubleValue())==Math.abs(num.doubleValue())
返回true;
返回false;
}
}

完整文件的代码:

class Container<T extends Number> {
    T value;
    
    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    void show() {
        System.out.println(value.getClass().getSimpleName());
    }
    
}

class BigContainer<T,V>{
    T t;
    V v;
    public BigContainer() {
        // TODO Auto-generated constructor stub
    }
    public BigContainer(T t,V v) {
        // TODO Auto-generated constructor stub
        this.t = t;
        this.v = v;
        
    }
    
    public void getStuff(T t,V v) {
        this.t = t;
        this.v = v;
    }
    
    
    public void printStuff() {
        System.out.println(t.getClass().getSimpleName()+"\t"+v.getClass().getSimpleName());
        System.out.println(t+"\t"+v);
    }
}

class NumberFxn<T extends Number>{
    T num;
    
    public NumberFxn(T num) {
        // TODO Auto-generated constructor stub
        this.num = num;
    }
    
    public boolean absEqual(NumberFxn<?> ob) {
        if(Math.abs(ob.doubleValue()) == Math.abs(num.doubleValue())) 
            return true;
        return false;
        
    }
}


public class GenericsDemo {
    public static void main(String[] args) {
        Container<Double> ob = new Container<>();       
        BigContainer<Double,String> obj = new BigContainer<>();
        ob.setValue(5.0);
        System.out.println(ob.getValue());
        ob.show();
        obj.getStuff(5.0, "Haritas");
        obj.printStuff();
        
        NumberFxn<Integer> a = new NumberFxn(6);
        NumberFxn<Double> b = new NumberFxn(-6.0);
        System.out.println("\n" );
        a.absEqual(b);
    }
}
类容器{
T值;
公共T getValue(){
返回值;
}
公共无效设置值(T值){
这个值=值;
}
无效显示(){
System.out.println(value.getClass().getSimpleName());
}
}
类BigContainer{
T;
V V;
公共大容器(){
//TODO自动生成的构造函数存根
}
公共大集装箱(T,V){
//TODO自动生成的构造函数存根
t=t;
这个,v=v;
}
公共空间(T、V、V){
t=t;
这个,v=v;
}
公开作废印刷品(){
System.out.println(t.getClass().getSimpleName()+“\t”+v.getClass().getSimpleName());
System.out.println(t+“\t”+v);
}
}
类号fxn{
T数;
公共编号fxn(T num){
//TODO自动生成的构造函数存根
this.num=num;
}
公共布尔值absEqual(NumberFxn ob){
if(Math.abs(ob.doubleValue())==Math.abs(num.doubleValue())
返回true;
返回false;
}
}
公共类泛型演示{
公共静态void main(字符串[]args){
Container ob=新容器();
BigContainer obj=新的BigContainer();
ob.设定值(5.0);
System.out.println(ob.getValue());
ob.show();
对象getStuff(5.0,“哈里塔”);
obj.printStuff();
NumberFxn a=新的NumberFxn(6);
NumberFxn b=新的NumberFxn(-6.0);
System.out.println(“\n”);
a、 助理秘书长(b);
}
}
试试这个:

class NumberFxn<T extends Number>{
    T num;
    
    public NumberFxn(T num) {
        // TODO Auto-generated constructor stub
        this.num = num;
    }
    
    public boolean absEqual(NumberFxn<?> ob) {
        if(Math.abs(ob.num.doubleValue()) == Math.abs(num.doubleValue())) 
            return true;
        return false;
        
    }
}
类号fxn{
T数;
公共编号fxn(T num){
//TODO自动生成的构造函数存根
this.num=num;
}
公共布尔值absEqual(NumberFxn ob){
if(Math.abs(ob.num.doubleValue())==Math.abs(num.doubleValue())
返回true;
返回false;
}
}
NumberFxn ob

numberfxnh的一个实例,它是如何工作的?它应该从构造函数中获得值。
class NumberFxn<T extends Number>{
    T num;
    
    public NumberFxn(T num) {
        // TODO Auto-generated constructor stub
        this.num = num;
    }
    
    public boolean absEqual(NumberFxn<?> ob) {
        if(Math.abs(ob.num.doubleValue()) == Math.abs(num.doubleValue())) 
            return true;
        return false;
        
    }
}
ob.num.doubleValue()