文档

Java™教程
隐藏目录
问题和练习
教程:学习Java语言
课程:泛型(更新)

问题和练习:泛型

  1. 编写一个通用方法,用于计算集合中具有特定属性的元素的数量(例如,奇数整数,素数,回文数)。

  2. 以下类能够编译吗?如果不能,为什么?
    public final class Algorithm {
        public static <T> T max(T x, T y) {
            return x > y ? x : y;
        }
    }
    
  3. 编写一个通用方法,用于交换数组中两个不同元素的位置。

  4. 如果编译器在编译时擦除所有类型参数,为什么还要使用泛型?

  5. 以下类在类型擦除后转换为什么?
    public class Pair<K, V> {
    
        public Pair(K key, V value) {
            this.key = key;
            this.value = value;
        }
    
        public K getKey() { return key; }
        public V getValue() { return value; }
    
        public void setKey(K key)     { this.key = key; }
        public void setValue(V value) { this.value = value; }
    
        private K key;
        private V value;
    }
    
  6. 以下方法在类型擦除后转换为什么?
    public static <T extends Comparable<T>>
        int findFirstGreaterThan(T[] at, T elem) {
        // ...
    }
    
  7. 以下方法能够编译吗?如果不能,为什么?
    public static void print(List<? extends Number> list) {
        for (Number n : list)
            System.out.print(n + " ");
        System.out.println();
    }
    
  8. 编写一个通用方法,在列表的范围 [begin, end) 中找到最大的元素。

  9. 以下类能够编译吗?如果不能,为什么?
    public class Singleton<T> {
    
        public static T getInstance() {
            if (instance == null)
                instance = new Singleton<T>();
    
            return instance;
        }
    
        private static T instance = null;
    }
    
  10. 给定以下类:
    class Shape { /* ... */ }
    class Circle extends Shape { /* ... */ }
    class Rectangle extends Shape { /* ... */ }
    
    class Node<T> { /* ... */ }
    
    以下代码能够编译吗?如果不能,为什么?
    Node<Circle> nc = new Node<>();
    Node<Shape>  ns = nc;
    
  11. 考虑以下类:
    class Node<T> implements Comparable<T> {
        public int compareTo(T obj) { /* ... */ }
        // ...
    }
    
    以下代码能够编译吗?如果不能,为什么?
    Node<String> node = new Node<>();
    Comparable<String> comp = node;
    
  12. 如何调用以下方法以找到列表中与指定整数列表互质的第一个整数?
    public static <T>
        int findFirst(List<T> list, int begin, int end, UnaryPredicate<T> p)
    
    注意,如果 gcd(a,b)= 1,则两个整数ab是互质的,其中 gcd 是最大公约数的缩写。
查看答案。

上一页: 泛型的限制
下一页: