参数化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()