泛型方法与有界类型参数:如何调用指定泛型方法
调用泛型方法
countGreaterThan的正确方式 请问如何调用如下泛型方法:
public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) { int count = 0; for (T e : anArray) if (e.compareTo(elem) > 0) ++count; return count; }我已尝试多种调用方式但均未成功。因身处国内PC被封禁,只能通过手机打字,无法输入更多内容。
别担心,这个泛型方法的核心要求是类型T必须实现Comparable<T>接口——也就是这个类型得能和自己做比较,Java里像Integer、String、Double这些常用类型都自带这个实现,调用起来其实很直接,给你几个具体的例子:
1. 用Integer数组调用
public class Main { public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) { int count = 0; for (T e : anArray) if (e.compareTo(elem) > 0) ++count; return count; } public static void main(String[] args) { // 定义Integer数组 Integer[] nums = {1, 3, 5, 7, 9}; // 编译器会自动推断类型T为Integer,直接调用即可 int result = countGreaterThan(nums, 5); System.out.println(result); // 输出2,因为7和9都大于5 } }
2. 用String数组调用
public static void main(String[] args) { String[] words = {"apple", "banana", "cherry", "date"}; // 编译器自动推断T为String int result = countGreaterThan(words, "banana"); System.out.println(result); // 输出2,因为cherry和date的字典序比banana大 }
3. 手动指定泛型类型(可选场景)
如果编译器没法自动推断类型(这种情况很少见),你也可以手动指定T的类型,写法是在方法名前加<类型>:
int result = Main.<Integer>countGreaterThan(nums, 5);
自定义类型调用的前提
要是你想用自己写的类来调用这个方法,那这个自定义类必须实现Comparable<自定义类>接口,重写compareTo方法来定义比较规则,比如:
class Person implements Comparable<Person> { private int age; public Person(int age) { this.age = age; } @Override public int compareTo(Person other) { // 按年龄大小比较 return Integer.compare(this.age, other.age); } } // 调用示例 Person[] people = {new Person(20), new Person(30), new Person(40)}; int result = countGreaterThan(people, new Person(25)); System.out.println(result); // 输出2
内容的提问来源于stack exchange,提问作者Chenxi
相关产品推荐
相关产品推荐

