黑马程序员技术交流社区

标题: 还是反射调用方法的问题 [打印本页]

作者: 吴硕    时间: 2013-2-25 14:27
标题: 还是反射调用方法的问题
本帖最后由 吴硕 于 2013-2-25 20:32 编辑

请问下面程序编译时为什么会出现警告?如何处理才可以不显示警告
  1. import java.lang.reflect.Method;
  2. /**
  3. 反射方式调用方法
  4. */

  5. class Person
  6. {
  7.     private void show()
  8.     {
  9.         System.out.println("hello");
  10.     }

  11.     public void show(String str1, String str2)
  12.     {
  13.         System.out.println(str1+str2);
  14.     }
  15. }

  16. class MethodReflectTest
  17. {
  18.     public static void main(String[] args) throws Exception
  19.     {
  20.         Person p = new Person();
  21.         Class clazz = p.getClass();    //这样写又会报错,Class<Person>

  22.         Method showMethod1 = clazz.getDeclaredMethod("show");
  23.         showMethod1.setAccessible(true);
  24.         showMethod1.invoke(p);

  25.         Method showMethod2 = clazz.getMethod("show", String.class, String.class);
  26.         showMethod2.invoke(p, "ab", "cd");
  27.     }
  28. }
复制代码

作者: 柴乔军    时间: 2013-2-25 15:19
加个通配符就可以了<?>,这样就没警告了
作者: 全海波    时间: 2013-2-25 15:19
出现很多警告是因为,这里有泛型,你需要为其指定一个类型,当你没有指定泛型的时候,就会有安全隐患,Class <? extends Person> classzz = p.getClass();
这样写就不会报错了
作者: 吴硕    时间: 2013-2-25 16:50
本帖最后由 吴硕 于 2013-2-25 16:51 编辑
柴乔军 发表于 2013-2-25 15:19
加个通配符就可以了,这样就没警告了

请问为什么我这样写不可以呢
Class<Person> clazz = p.getClass();
作者: 吴硕    时间: 2013-2-25 16:51
全海波 发表于 2013-2-25 15:19
出现很多警告是因为,这里有泛型,你需要为其指定一个类型,当你没有指定泛型的时候,就会有安全隐患,Class  ...

没有泛型就会有安全隐患,为什么我这样写不行呢?
Class<Person> clazz = p.getClass();
作者: 全海波    时间: 2013-2-25 16:55
吴硕 发表于 2013-2-25 16:51
没有泛型就会有安全隐患,为什么我这样写不行呢?
Class clazz = p.getClass();

List list = new ArrayList();   看这个例子你能明白么?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2