编写一个通用类 MinMaxFinder,它可以找到实现了 Comparable 接口的类型中最小值和最大值。要求: 泛型类型 T 需要实现 Comparable<T> 接口,并且限制 T 的多个边界。 支持通过可变参数传递多个元素。
时间: 2024-09-15 21:07:31 浏览: 37
java集合求和最大值最小值示例分享
5星 · 资源好评率100%
你可以编写一个名为`MinMaxFinder`的通用类,它接受一个类型参数T,该类型参数需实现`Comparable<T>`接口。为了满足多个边界限制,通常我们会假设T是一个基本数据类型或者已知有边界范围的对象。下面是`MinMaxFinder`的一个简单实现:
```java
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MinMaxFinder<T extends Comparable<T>> {
private final T[] elements;
public MinMaxFinder(T... elements) {
this.elements = elements;
}
public T findMin() throws IllegalAccessException, InvocationTargetException {
Method method = Comparable.class.getMethod("compareTo", Object.class);
T minElement = elements[0];
for (T element : elements) {
if ((int) method.invoke(element, minElement) < 0) {
minElement = element;
}
}
return minElement;
}
public T findMax() throws IllegalAccessException, InvocationTargetException {
Method method = Comparable.class.getMethod("compareTo", Object.class);
T maxElement = elements[0];
for (T element : elements) {
if ((int) method.invoke(maxElement, element) > 0) {
maxElement = element;
}
}
return maxElement;
}
public static void main(String[] args) {
Integer[] numbers = {3, 1, 5, 2, 4};
MinMaxFinder<Integer> finder = new MinMaxFinder<>(numbers);
try {
System.out.println("Minimum number: " + finder.findMin());
System.out.println("Maximum number: " + finder.findMax());
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在这个类中,我们有两个方法`findMin()`和`findMax()`分别用于寻找最小值和最大值。通过反射调用`Comparable`接口的`compareTo`方法来比较元素。
请注意,这个实现依赖于元素是`Comparable`并且边界条件明确,如果元素不是数字或其他可直接进行比较的类型,可能会遇到异常。对于边界限制的具体情况,你可能需要在实际应用中检查并处理。
阅读全文