gpt4 book ai didi

java - 使用通用和原始类型执行操作不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:25:21 24 4
gpt4 key购买 nike

尝试使用 JAVA-Genric 学习一些基本操作,我尝试制作一个通用类,它接受一个数字并对其进行一些操作并返回值但它会抛出错误

父类:

public class HelloWorld{

public static void main(String []args){

MathsExec<Integer> my_obj = new MathsExec<Integer>();
int rst = my_obj.doAddition(100);
System.out.println("Solution is : "+rst);
}
}

通用类:

class MathsExec<T>{ //didn't extend NUMBER because m strictly sending int values

T doAddition(T nmbr){
int k=100;
T rst;
rst = nmbr+k;
return rst;
}
}

错误:

MathsExec.java:6: error: bad operand types for binary operator '*'

    rst = nmbr+k;
^

first type: T
second type: int
where T is a type-variable: T extends Object declared in class MathsExec 1 error

我理解为什么会出现此错误(操作类型不兼容),但根据泛型,类型 T 应该已转换为 Integer在执行 + 操作之前......或者我应该知道一些其他解释????

P.S : 请放轻松,JAVA 不是我的强项!!

最佳答案

泛型类型在编译时是未知的。因此,您会收到该编译错误。这是有道理的,因为不能保证您的 * 运算符将适用于您的泛型类型 T

一个简单但有教育意义的解决方案可能是添加一个名为 Multipliable 的接口(interface)并向其添加抽象方法 multiply(),而不是在 doAddition 中调用该方法 方法。顺便说一句,要做到这一点,您需要将您的类定义更改为类似

class MathsExec<T extends Multipliable>

补充说明:

  1. 我们必须明白,您不能对类使用像 * 这样的运算符,它们仅适用于基本类型。

  2. 如果您必须使用泛型并且必须对泛型类型执行某些操作,则必须让您的编译器满意并确保该泛型对象确实具有该方法。那就是通过 T extends SomeClass

  3. 如果您想在不使用接口(interface)或抽象类或其他任何东西的情况下练习泛型,最常见的用例是自定义数据结构。您实际上可能不需要对存储的数据进行很多操作。您只需将它们放入您的结构中即可。

关于java - 使用通用和原始类型执行操作不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22293335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com