如何实现含leiaSuurem方法的泛型类以找出两个整数的较大值
修正你的泛型比较类代码
嘿,我瞅了下你写的代码,有几个小问题导致它跑不起来,我帮你一步步修正哈:
原代码里的问题点
- 泛型声明位置错误:你把泛型
<T extends Comparable<T>>放在了方法返回类型int后面,这不符合Java语法。而且方法返回类型写了int,但你要返回的是泛型类型T,这里也错了。 - main方法不是static:Java程序的入口方法
main必须是static的,不然JVM找不到它来启动程序。 - 冗余的判断逻辑:你写了两个
if判断,其实只需要一个就够了——先假设x是最大值,然后如果y比它大,就把max换成y,没必要再判断一次x和y的大小。 - 方法调用问题:如果
leiaSuurem不是静态方法,在main里直接调用会报错,因为main是静态上下文,不能直接调用非静态方法。
修正后的代码方案一:泛型类
public class Vordleja<T extends Comparable<T>> { public T leiaSuurem(T x, T y){ T max = x; if(y.compareTo(max) > 0) { max = y; } return max; } public static void main(String[] args) { // 创建泛型类实例,指定类型为Integer Vordleja<Integer> vordleja = new Vordleja<>(); System.out.println("Largest ( 3, 4 ) element is : " + vordleja.leiaSuurem(3, 4)); } }
修正后的代码方案二:静态泛型方法(更灵活)
如果不想把整个类做成泛型,把leiaSuurem改成静态泛型方法会更方便,不用创建类实例:
public class Vordleja { // 泛型声明放在返回类型前面,这是静态泛型方法的正确写法 public static <T extends Comparable<T>> T leiaSuurem(T x, T y){ T max = x; if(y.compareTo(max) > 0) { max = y; } return max; } public static void main(String[] args) { // 直接调用静态方法 System.out.println("Largest ( 3, 4 ) element is : " + leiaSuurem(3, 4)); // 还可以用来比较其他实现了Comparable的类型,比如字符串 System.out.println("Largest ( \"apple\", \"banana\" ) element is : " + leiaSuurem("apple", "banana")); } }
解释下关键修改
- 把泛型声明
<T extends Comparable<T>>移到了正确的位置:如果是类泛型,就放在类名后面;如果是静态方法泛型,就放在方法的返回类型前面。 - 把方法返回类型从
int改成了T,这样才能返回泛型类型的最大值。 - 给
main方法加上了static修饰符,让它成为合法的程序入口。 - 简化了判断逻辑,去掉了冗余的
if语句,让代码更简洁高效。
内容的提问来源于stack exchange,提问作者Vlad Paskevits
相关产品推荐
相关产品推荐

