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 }

 

posted @ 2016-09-12 21:34  从零开始的程序员生活  阅读(169)  评论(0编辑  收藏  举报