Presentation is loading. Please wait.

Presentation is loading. Please wait.

Background. 7 月 20 日 Background 7 月 20 日 我原以为这是平凡的一天.

Similar presentations


Presentation on theme: "Background. 7 月 20 日 Background 7 月 20 日 我原以为这是平凡的一天."— Presentation transcript:

1 Background

2 7 月 20 日

3 Background 7 月 20 日 我原以为这是平凡的一天

4 Background 但我举了不该举的手

5 Background 但我举了不该举的手 说了不该说的话

6 Background 但我举了不该举的手 说了不该说的话 听了不该听的怂恿

7 这是轮子 ——Java 泛型完善 2011 级 ACM 班 陈志鹏

8 Outline Background Motivation & Criteria Design & Implementation One More Example Advancement Discussion & Conclusion Reference

9 class cat { public: void say() { printf("I am a cat.\n"); } }; class mouse { public: void say() { printf("I am a mouse.\n"); } }; Background template void say(T a) { a.say(); } int main() { cat acat; mouse amouse; say(acat); say(amouse); return 0; } C++

10 class cat { public void say() { System.out.println ("I am a cat.\n"); } }; class mouse { public void say() { System.out.println ("I am a mouse.\n"); } }; Background public class example { public static void say(T a) { a.say(); } Public static void main(String[] arg) { cat acat; mouse amouse; say(acat); say(amouse); return 0; } Java

11 class cat { public void say() { System.out.println ("I am a cat.\n"); } }; class mouse { public void say() { System.out.println ("I am a mouse.\n"); } }; Background public class example { public static void say(T a) { a.say(); } Public static void main(String[] arg) { cat acat; mouse amouse; say(acat); say(amouse); return 0; } Java The method say() is undefined for type T

12 class cat { public void say() { System.out.println ("I am a cat.\n"); } }; class mouse { public void say() { System.out.println ("I am a mouse.\n"); } }; Background public class example { public static void say(T a) { a.say(); } Public static void main(String[] arg) { cat acat; mouse amouse; say(acat); say(amouse); return 0; } Java The method say() is undefined for type T Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method say() is undefined for the type T

13 class cat { public void say() { System.out.println ("I am a cat.\n"); } }; class mouse { public void say() { System.out.println ("I am a mouse.\n"); } }; Background public class example { public static void say(T a) { a.say(); } Public static void main(String[] arg) { cat acat; mouse amouse; say(acat); say(amouse); return 0; } Java

14 Motivation & Criteria 完善 Java 的泛型 基于 Java 封装与安全

15 Design & Implementation 所有类继承 Object 多态 反射

16 Design & Implementation public static void say(T a) { Class demo = a.getClass(); try { Method met = demo.getMethod(“say”); met.invoke(a); } catch (Exception ex) {} } say(acat); Java

17 One More Example class cat { public : int key; }; class mouse { public : int key; }; template bool cmp(T a, T b) { return a.key < b.key; } int main() { cat cats[100]; mouse mice[100]; //Initialization… sort(cats, cats + 100, cmp); sort(mice, mice + 100, cmp); //Output… } C++

18 One More Example class cat { public : int key; }; class mouse { public : int key; }; template bool cmp(T a, T b) { return a.key < b.key; } int main() { cat cats[100]; mouse mice[100]; //Initialization… sort(cats, cats + 100, cmp); sort(mice, mice + 100, cmp); //Output… } C++ error: no matching function for call to `sort(cat[100], cat*, )'

19 One More Example class cat { public : int key; }; class mouse { public : int key; }; template bool cmp(T a, T b) { return a.key < b.key; } int main() { cat cats[100]; mouse mice[100]; //Initialization… sort(cats, cats + 100, cmp); sort(mice, mice + 100, cmp); //Output… } C++

20 One More Example public static class comp implements Comparator{ public int compare(Object o1, Object o2) { Class demo = o1.getClass; Object a = null, b = null; try { Field field = demo.getDeclaredField("key"); a = field.get(o1); b = field.get(o2); } catch (Exception ex) { } return (int)a - (int)b; }} public static void main(String[] arg) { //Initialization… Arrays.sort(cats, new comp()); //Output… } 那些 C++ 做不到的事 泛型在这里 Java

21 Advancement 多参数 返回值 良好封装 权限修饰符 public & private 异常处理

22 Advancement 多参数 – public static void say(T a, Class[] cla, Object… objs) – Method met = demo.getMethod(“…”, cla); – met.invoke(a, objs); – say(acat, new Class[] {String.class, String.class}, “Hi”, “I am a cat”) 返回值 良好封装 权限修饰符 public&private 异常处理 Class[] cla = new Class[objs.length] cla[i] = objs[i].getClass; Java

23 Advancement 多参数 返回值 – public static int say(T a) – return met.invoke(a); – int ans = say(acat); 良好封装 权限修饰符 public&private 异常处理 Java

24 Java Advancement 良好封装 public static S run(T a, String method, Class[] cla, Object… objs) { Class x = a.getClass(); Object ans = null; try { Method met = x.getMethod(method, cla); ans = met.invoke(a, objs); } catch (Exception ex) {} return (S) ans; } returnValue = run(acat, “say”, new Class[] {String.class, String.class}, “Hi”, “I am a cat.”);

25 Advancement 多参数 返回值 良好封装 权限修饰符 public&private – int mo = field.getModifiers(); – String priv = Modifier.toString(mo); – int mo = met.getModifiers(); 异常处理 Java

26 Discussion & Conclusion Generic Programming – 1980 Ada -> 1983 C++ – 2004 jdk 1.5

27 Discussion & Conclusion Generic Programming – 1980 Ada -> 1983 C++ – 2004 jdk 1.5 WHY?

28 Discussion & Conclusion Generic Programming – 1980 Ada -> 1983 C++ – 2004 JDK 1.5 & J2SE 5.0 WHY? – No requirement – Impact of mainstream – Safety & Elegant Functional programming CLU Can be implemented by other ways

29 Discussion & Conclusion Generic Programming – 1980 Ada -> 1983 C++ – 2004 JDK 1.5 & J2SE 5.0 WHY? – No requirement – Impact of mainstream – Safety & Elegant Other generic features Functional programming CLU Can be implemented by other ways ? 通配符

30 Reference 《 Java 核心技术》 … Wiki…

31 END THANKS


Download ppt "Background. 7 月 20 日 Background 7 月 20 日 我原以为这是平凡的一天."

Similar presentations


Ads by Google