Java基础之泛型——使用通配符类型参数(TryWildCard)
2013-11-12 23:19
603 查看
控制台程序
使用通配符类型参数可以设定方法的参数类型,其中的代码对于泛型类的实际类型参数不能有任何依赖。如果将方法的参数类型设定为Binary<?>,那么方法可以接受BinaryTree<String>、BinaryTree<Double>或任意BinaryTree<>类型的参数。
LinkedList<T>和BinaryTree<T>和上一例子一样。
下面是上一个例子的修改版本:
listAll()方法的参数类型使用通配符规范而不是显式的类型参数。因此,该方法接受任意LinkedList<>类型的参数。因为每个对象不论实际类型是什么都有toString()方法,所以在方法体中传递给println()的参数总是有效。
当然,依赖继承的toString()方法来在输出中表示对象在很多情况下并不理想。
使用通配符类型参数可以设定方法的参数类型,其中的代码对于泛型类的实际类型参数不能有任何依赖。如果将方法的参数类型设定为Binary<?>,那么方法可以接受BinaryTree<String>、BinaryTree<Double>或任意BinaryTree<>类型的参数。
LinkedList<T>和BinaryTree<T>和上一例子一样。
下面是上一个例子的修改版本:
public class TryWildCard { public static void main(String[] args) { int[] numbers = new int[30]; for(int i = 0 ; i < numbers.length ; ++i) { numbers[i] = (int)(1000.0*Math.random()); // Random integers 0 to 999 } // List starting integer values int count = 0; System.out.println("Original values are:"); for(int number : numbers) { System.out.printf("%6d", number); if(++count%6 == 0) { System.out.println(); } } // Create the tree and add the integers to it BinaryTree<Integer> tree = new BinaryTree<>(); for(int number:numbers) { tree.add(number); } // Get sorted values LinkedList<Integer> values = tree.sort(); System.out.println("\nSorted values are:"); listAll(values); // Create an array of words to be sorted String[] words = {"vacillate", "procrastinate", "arboreal", "syzygy", "xenocracy", "zygote", "mephitic", "soporific", "grisly", "gristly" }; // List the words System.out.println("\nOriginal word sequence:"); for(String word : words) { System.out.printf("%-15s", word); if(++count%5 == 0) { System.out.println(); } } // Create the tree and insert the words BinaryTree<String> cache = new BinaryTree<>(); for(String word : words) { cache.add(word); } // Sort the words LinkedList<String> sortedWords = cache.sort(); // List the sorted words System.out.println("\nSorted word sequence:"); listAll(sortedWords); } // List the elements in any linked list public static void listAll(LinkedList<?> list) { for(Object obj : list) { System.out.println(obj); } } }
listAll()方法的参数类型使用通配符规范而不是显式的类型参数。因此,该方法接受任意LinkedList<>类型的参数。因为每个对象不论实际类型是什么都有toString()方法,所以在方法体中传递给println()的参数总是有效。
当然,依赖继承的toString()方法来在输出中表示对象在很多情况下并不理想。
相关文章推荐
- Java基础之泛型——使用泛型链表类型(TryGenericLinkedList)
- Java基础:泛型类型的子类及通配符的使用
- Java基础(21):泛型—泛型的定义、用法与类型通配符的使用方式
- Java基础之泛型——使用二叉树进行排序(TryBinaryTree)
- 在 Java 的泛型类型中使用通配符
- JAVA基础再回首(十六)——泛型的概述、使用、泛型类、泛型方法、泛型接口、泛型高级(通配符)
- java基础-反射 --通过反射 获取泛型实际类型参数
- 01-java基础加强,eclipse工具使用,快捷键,断点调试,单元测试,jdk5新特性,增强for循环,集合map,list,可变参数,枚举,反射,泛型
- Java 5.0 泛型之 使用泛型统一传入的参数类型
- 在 Java 的泛型类型中使用通配符
- Java基础学习之泛型(泛型方法、泛型类、通配符的使用)
- 黑马程序员--Java基础加强--15.利用反射操作泛型IV【通过反射Method解析泛型方法思路】【通过Method对四种Type子接口类型进行解剖】【使用递归对任意复合泛型类型进行彻底解剖】【个人
- [疯狂Java]泛型:类型参数多态问题、类型通配符(?)、类型通配符的上下限、类型参数的上限(类、接口)
- JAVA基础复习十六-LinkedList、栈和队列数据类型、泛型、增强for循环、可变参数、Arrays工具类
- 深入理解 Java 泛型:类型擦除、通配符、运行时参数类型获取
- Java知多少(42)泛型通配符和类型参数的范围
- <转>深入理解 Java 泛型:类型擦除、通配符、运行时参数类型获取
- 从头认识java-13.15 使用泛型时出现的问题(1)-泛型不能使用基础类型
- 在 Java 的泛型类型中使用通配符
- 黑马程序员_Java基础_泛型的使用,通配符,泛型限界