跨类调用方法遇问题:编译失败/返回空值及方法匹配错误求助
解决Movie类getRatingDesc()方法调用不匹配的问题
兄弟,我来帮你捋捋这个问题——你遇到的其实是Java里最常见的方法签名不匹配问题,咱们一步步拆解解决:
先搞懂第一个错误的根源
你看到的 method getRatingDesc() from class Movie cannot be applied to given types 错误,本质是:你调用方法时传的参数(数量/类型),和Movie类里定义的getRatingDesc()方法的参数要求完全对不上。
举个最常见的场景:
- 假设你的Movie类里,
getRatingDesc()是无参方法(比如它依赖Movie对象自己的内部属性,比如numReviews、rating来生成描述字符串s),但你调用的时候却传了int numReview参数,这就会直接触发这个错误。
再看你改调用方式后的新错误
当你改成movie1.getRatingDesc(int numReview)后又报错,大概率是下面两种情况之一:
- Movie类里根本没定义带int参数的
getRatingDesc方法; - 就算定义了,参数类型/数量还是不匹配,或者方法的返回值处理有问题(比如你需要返回String,但方法返回了void)。
针对你的需求(返回描述评分的变量s),给出具体解决方案
你的核心需求是获取描述评分的s,那这个s应该是基于Movie对象自身的属性计算出来的,而不是靠外部传参数。正确的做法应该是这样:
第一步:修正Movie类的getRatingDesc()方法定义
确保方法是无参、public、返回String类型,并且内部用类的成员变量生成s:
public class Movie { // 假设你的Movie类有这些成员变量(用来计算评分描述) private int numReviews; private double rating; // 构造方法、成员变量的getter/setter(必须有,否则没法设置属性) public Movie(int numReviews, double rating) { this.numReviews = numReviews; this.rating = rating; } // 正确的getRatingDesc()方法:无参,返回计算好的s public String getRatingDesc() { String s; // 这里根据你的业务逻辑生成s,举个例子: if (numReviews > 100 && rating >= 4.5) { s = "口碑爆款影片"; } else if (rating >= 4.0) { s = "优质好评影片"; } else { s = "普通观看影片"; } return s; // 一定要返回s! } }
第二步:在MovieRatingApp里正确调用方法
调用时不要传任何参数,因为方法已经会用Movie对象自己的属性计算s了:
public class MovieRatingApp { public static void main(String[] args) { // 创建Movie对象时传入必要的属性值 Movie movie1 = new Movie(120, 4.6); // 无参调用getRatingDesc(),直接获取s的值 String ratingDescription = movie1.getRatingDesc(); System.out.println(ratingDescription); // 输出:口碑爆款影片 } }
最后再检查几个容易踩坑的点
- 确保
getRatingDesc()方法的访问修饰符是public,如果是private或者protected,外部类MovieRatingApp根本调用不了; - 方法的返回类型必须是
String,因为你要返回的是字符串s; - 方法内部一定要有
return s;语句,否则会报“缺少返回语句”的错误。
内容的提问来源于stack exchange,提问作者nschwenks
相关产品推荐
相关产品推荐

