NetBeans中Java代码编译失败:int无法转换为Supplement类型错误求助
解决Java编译错误:int无法转换为Supplement
嘿,我一眼就看出你的链式调用踩坑了,咱们来一步步捋清楚问题:
错误根源
看你给出的代码行和编译错误:
payCustomer.get(index).setSupp((payCustomer.get(index).aListSize()-1)).setSup(supList.get(i));
编译器报错说int不能转成Supplement,这是因为setSupp(...)这个方法的返回值是int(比如它可能返回操作的索引或者是否成功的标识),但你紧接着想调用setSup(...)——这个方法是属于Supplement类的,编译器当然会懵:你怎么能在一个int值上调用Supplement的方法呢?
说白了,你把两种不同返回类型的方法硬凑成链式调用了,这完全不匹配。
修复方法
结合你的杂志订阅系统场景,你应该是想获取某个已存在的Supplement对象,然后给它设置补充内容对吧?那正确的做法是拆分调用,或者把setSupp换成getSupp(前提是你的类里有这个获取方法):
方案1:拆分调用(可读性更高)
// 先拿到要操作的客户对象,避免重复调用get(index) Customer targetCustomer = payCustomer.get(index); // 根据索引拿到对应的Supplement对象 Supplement targetSupplement = targetCustomer.getSupp(targetCustomer.aListSize() - 1); // 给这个Supplement设置内容 targetSupplement.setSup(supList.get(i));
方案2:简洁的链式调用(如果getSupp方法存在)
payCustomer.get(index) .getSupp(payCustomer.get(index).aListSize() - 1) .setSup(supList.get(i));
这里的关键是:你之前用的setSupp是用来设置某个值的(返回int),但你实际需要的是获取Supplement对象,所以得用getSupp方法来拿到它,之后才能调用setSup。
额外小提示
- 建议你去检查下
setSupp方法的定义:它到底是做什么的?如果是用来添加Supplement的,那方法名改成addSupp会更符合Java命名规范,而且返回值应该是boolean或者void,而不是int,这样也能避免这类误解。 - 尽量避免重复调用
payCustomer.get(index),把它存到局部变量里,代码更清晰,也能减少不必要的列表访问操作。
内容的提问来源于stack exchange,提问作者whynot
相关产品推荐
相关产品推荐

