为了账号安全,请及时绑定邮箱和手机立即绑定

把Class.forName()换一种写法就报错了!

1 首先,这段代码没有任何问题。
public class OfficeBetter{
      public static void main(String[] args){
      try{
        OfficeAble oa =(OfficeAble) Class.forName(args[0]).getConstructor().newInstance();
        oa.start();
      }catch(Exception e){
e.printStackTrace();
      }
  }
}

2 可是,当我不想用

Class.forName(args[0])

来获取类类型,改成这种写法就报错了:

public class OfficeBetter{
      public static void main(String[] args){
      try{
        Class c=Class.forName(args[0]);
        Constructor constructor=c.getConstructor();
        OfficeAble oa=(OfficeAble)constructor.newInstance();
        oa.start();
      }catch(Exception e){
e.printStackTrace();
      }
  }
}

谁能帮我分析一下吗?编译报错:

OfficeBetter.java:5: error: cannot find symbol
        Constructor constructor=c.getConstructor();
        ^
  symbol:   class Constructor
  location: class OfficeBetter
Note:
OfficeBetter.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error


正在回答

2 回答

 本来代码里面是动态类实现,你Constructor constructor=c.getConstructor();这行代码使用了静态类的实现方式,应该会编译不过,因为c.getConstructor()无法在静态编译期间确定类型。

1 回复 有任何疑惑可以回复我~

正解。多谢你的解答,后面我看书之后,了解了Class.forName("xxx")是动态编译。当时不懂。下面是我的笔记,

http://img1.sycdn.imooc.com//5f0c138200010f6316931079.jpg

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

把Class.forName()换一种写法就报错了!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信