我现在前台给出了一个String 表示 一个类名 (只知道类名 没有任何路径)我怎么通过这个String,New出这个对象??在我的业务层 和这个类 并不是在一个包下。。例子:UserDao  --  路径 :  com.dao;User  --  路径: com.dto;在前台发送过来一个叫“User”的名字 如何New在UserDao里 New 出来这个User..求指教!!

解决方案 »

  1.   

    User user = (User)class.forName("com.dto.user").newInstance() 
      

  2.   

    我的意思是说  前台只给了 user  后台接收的只是 user  并没有com.dto.user 这串完整的路径。。Class.forName()参数是给完全的路径- - 。。仅仅传过来时user  并不能找到啊。。
      

  3.   

    你人是知道com.dto
    你如何让电脑知道一定是com.dto,不是com.abc?
      

  4.   

    或者,你可以通过类,查找类所在的完整路径,
    可以google
      

  5.   

    如果类名不重复 就用程序预先扫描 工作路径下的所有.java文件吧 然后就能根据类名拿路径 然后获取实例了
      

  6.   

    http://www.cnblogs.com/walkerwang/希望能解决你的问题
      

  7.   

    第一,要通过反射创建对象,必须要清楚的知道包名加类名,否则这是不可能的事。第二,如果前台传来的只是类名,那你就要想方设法得到类的全名,这就必须要其它的信息,比如楼主说的“肯定存在一个唯一的USER类”,那么这事还是有解决方法的,因为通过这点还是能找出user类的全名的,下面我说说我的解决方法。1、建一个map,key为类名,value为类的全名,这事可以借助java的IO来完成,当然你也可以手工住map里放这些数据,总之无论用什么方法,只要把数据放里就行了,我还是建义用IO遍历得到所有的类名。接下来怎么做不用我说了吧,就是依KEY取值,在用反射创对象了2、你可以把BEAN放在SPRING中,然后每次请求从SPRING里拿。
      

  8.   

    能不能考虑使用 .properties文件读取呢。 
    在上述文件中保存key-value对,如:user=com.dto.user  
    之后读取该文件通过传“user”就可以拿到com.dto.user 然后在用class.forName()创建出对象
    你看靠谱不?
      

  9.   

    如果没打jar包,可以从项目顶层目录开始搜索类名加.class那个文件所在的路径,从而通过路径名算出类全名,如果是jar包就麻烦了,不知能否通过zip操作搜索其中的类
      

  10.   

    我觉得 17L的 思路挺好 不过觉的灵活性好像差了点吧毕竟都写死在里面了。。但是归根与19L的情况下  看似还要开排除JAR包的可能。。13L的方法 好像过于消耗性能了吧- - 。。15L的方法 貌似可行    自动扫描实体类文件夹 获得全部的实体路径 然后MAP存起来。。不过归根后   同理 扫描后跟17L的方法结合一下 也靠谱(不过读MAP  可比读properties性能好多了啊。、。)。。