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 }