java 泛型小结
1 public class GenericsDemo06 { 2 3 public static void main(String[] args) { 4 5 Box<String> name = new Box<String>("corn"); 6 Box<Integer> age = new Box<Integer>(712); 7 Box<Number> number = new Box<Number>(314); 8 9 getData(name); 10 getData(age); 11 getData(number); 12 System.out.println("============="); 13 getData2(name); 14 getData2(age); 15 getData2(number); 16 System.out.println("============="); 17 //getUpperNumberData(name); // 1 18 getUpperNumberData(age); // 2 19 getUpperNumberData(number); // 3 20 System.out.println("============="); 21 Box<String> i1 = new Box<String>() ; // 声明String的泛型对象 22 Box<Object> i2 = new Box<Object>() ; // 声明Object的泛型对象 23 i1.setData("string"); 24 i2.setData("string2"); 25 getDownNumberData(i2); 26 String aString=new String("string2"); 27 i2.setData(aString); 28 29 getDownNumberData(i1); 30 getDownNumberData(i2); 31 getDownNumberData(name); 32 System.out.println("============="); 33 myprint.print("dad","dawddd","1212323"); 34 myprint.print2(); 35 36 37 } 38 39 public static void getData(Box<?> data) { 40 System.out.println("data :" + data.getData()); 41 } 42 43 public static void getData2(Box<?> data) { 44 System.out.println("data :" + data); 45 } 46 47 //只能接收Number及其Number的子类 48 public static void getUpperNumberData(Box<? extends Number> data){ 49 System.out.println("data :" + data.getData()); 50 } 51 //// 只能接收String或Object类型的泛型 52 public static void getDownNumberData(Box<? super String> data){ 53 System.out.println("data :" + data.getData()); 54 } 55 56 } 57 //可变长参数用法 58 /* 59 (1)只能出现在参数列表的最后; 60 (2)...位于变量类型和变量名之间,前后有无空格都可以; 61 (3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。 62 */ 63 class myprint { 64 public static void print(String... args) { 65 for (int i = 0; i < args.length; i++) { 66 System.out.print(args[i]+","); 67 } 68 //高级for 69 for (String i : args) 70 System.out.print(i +","); 71 72 } 73 74 //不可以再写一个类似的,与上面可能重复 75 //public static void print(String test,String...args ){ 76 //System.out.println("----------"); 77 //} 78 //换行符的用法 79 public static void print2(){ 80 //注意在将流写入文件时,换行应根据操作系统的不同来决定。 81 //在程序我们应尽量使用System.getProperty("line.separator")来获取当前系统的换 行符,而不是写\r\n或\n。 82 //操作系统的不同,换行符操也不同: /r Mac /n Unix/Linux /r/n Windows 83 //'\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来。 84 //当我们在java控制台输出的时候,\r和\n都能达到换行的效果。 85 if (System.getProperty("line.separator").equals("\r\n")) { 86 System.out.println("\\r\\n is for windows"); 87 } else if (System.getProperty("line.separator").equals("\r")) { 88 System.out.println("\\r is for Mac"); 89 } else if (System.getProperty("line.separator").equals("\n")) { 90 System.out.println("\\n is for Unix\\Linux"); 91 } 92 93 System.out.println("aa\nbb"); 94 System.out.println("aa\rbb"); 95 System.out.println("aa\tbb"); 96 } 97 } 98 99 100 class Box<T> { 101 private T data; 102 public Box() { 103 } 104 105 public Box(T data) { 106 setData(data); 107 } 108 public T getData() { 109 return data; 110 } 111 public void setData(T data) { 112 this.data = data; 113 } 114 115 }