CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

怎样把"String"这个字符串转换成String这个类???

楼主jbas(jbas)2005-04-16 21:49:22 在 Java / J2SE / 基础类 提问

我现在有一个变量String   s="StringBuffer";  
  我想实现这样的功能,  
    s   s1=new   s();  
  这个s其实要的是StringBuffer这个类,不知怎样实现??? 问题点数:100、回复次数:23Top

1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-16 21:51:21 得分 0

StringBuffer   sb=(StringBuffer)Class.forName("StringBuffer").newInstance();Top

2 楼jbas(jbas)回复于 2005-04-16 21:52:57 得分 0

其实就是怎样把"StringBuffer"这个字符串变成StringBuffer这个类?Top

3 楼lxleaves(飘泊的叶子)回复于 2005-04-16 21:56:04 得分 5

new   StringBuffer("StringBuffer")Top

4 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-16 21:56:05 得分 45

对啊!  
  String   s="StringBuffer";  
   
  Object   o=Class.forName(s).newInstance();  
   
  这个o就是StringBuffer的对象了  
  Top

5 楼jbas(jbas)回复于 2005-04-16 22:05:10 得分 0

可是我不知道我要转换的是StringBuffer类呀,这个是要根据s的内容动态转换的,也就是说  
   
  StringBuffer   sb=(StringBuffer)Class.forName("StringBuffer").newInstance();  
   
  中(StringBuffer)也是不知道的,要根据"StringBuffer"得到  
  Top

6 楼jbas(jbas)回复于 2005-04-16 22:07:19 得分 0

Object   o=Class.forName(s).newInstance();  
   
  那就得到Object类了,可是我要的是根据s的变量值的类呀!Top

7 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-16 22:08:09 得分 0

呵呵,我知道你的意思  
  那你告诉我,你这样动态地得到一个对象之后,怎么使用它?  
  难道不需要知道它具体的类就直接用么?Top

8 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-16 22:08:44 得分 0

Object   o=Class.forName(s).newInstance();  
   
  那就得到Object类了,可是我要的是根据s的变量值的类呀!  
  ------  
  后面使用的时候强制转换!  
  Top

9 楼jbas(jbas)回复于 2005-04-16 22:13:12 得分 0

我是根据String   s="StringBuffer"的到s的值  
  再是根据s值对应的值生成一个相对应的新类,至于这个类的操作,我会在另外的地方定义,来用的现在是怎样生成这个类的问题Top

10 楼jbas(jbas)回复于 2005-04-16 22:15:11 得分 0

如果我在别的地方定义了要对这个类有getName()方法,  
  现在得到Object,可是我不能o.getName()呀!Top

11 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-16 22:16:38 得分 0

至于这个类的操作,我会在另外的地方定义  
  ----------  
  好,我就是想知道这个!  
  另外的地方你到底是怎么用?  
  你肯定在那个地方知道自己使用的是哪个类的对象的,呵呵Top

12 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-16 22:18:39 得分 0

你的字符串已经是这个类的名字了  
  何必在麻烦地通过其他办法得到这个名字呢?  
   
  不过也可以啊  
  Class   c=Class.forName("StringBuffer");  
  String   name=c.getName();Top

13 楼fjxy1223(刘金勇)回复于 2005-04-16 22:38:38 得分 0

studyTop

14 楼jbas(jbas)回复于 2005-04-16 22:38:49 得分 0

->肯定在那个地方知道自己使用的是哪个类的对象的,  
  肯定知道的,  
  我不是要得到这个名字,我是要这个类Top

15 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-16 22:41:02 得分 0

肯定知道的,  
  我不是要得到这个名字,我是要这个类  
  ------------  
  既然是知道的,那就强制转换刚才的Object就可以了啊Top

16 楼jbas(jbas)回复于 2005-04-16 23:05:02 得分 0

tring   s="A"  
  A   a=new   A();  
  a.doSomthing()  
   
  String   s="B"  
  B   b=new   B();  
  b.doSomhting1();  
   
  但是知道的是Sting   中的值,不能"StringBuffer"   s=new   "StringBuffer",一定要StringBuffer   s=new   StringBuffer();    
   
   
  Top

17 楼lxleaves(飘泊的叶子)回复于 2005-04-17 00:39:50 得分 10

觉得你很迷糊  
  要得到这个类,一般用于调用其中的方法  
  简单的方式是这个类实现一个接口或继承一个父类  
   
  interface   AAA{  
  public   void   doSomething();  
  }  
   
  AAA   a   =   (AAA)Class.forName("SomeClass").newInstance();  
  a.doSomething();Top

18 楼jbas(jbas)回复于 2005-04-17 09:01:10 得分 0

可是我的自定义类很多,里面的方法也很多,所以不能用接口  
   
  "MyClass1"   s=new   "MyClass1"()  
   
  怎样能变成  
   
  MyClass1   s=new   MyClass1()  
   
  当然"MyClass1"字符串是变的,  
   
  其实这就是java中是不是可以在运行时确定类型,即rtti。而且不能用多态来解决,因为没法用多态Top

19 楼kingfish(工作很忙,很少来csdn...)回复于 2005-04-17 09:15:02 得分 20

根据"MyClass1",你知道要调用什么方法吗?   知道那就反射方法再调用  
   
  我的blog上有2篇文章可以参考(http://blog.csdn.net/kingfish)Top

20 楼hongyan2004(spring+hibernate)回复于 2005-04-17 14:07:59 得分 5

说了怎么多,只要用反射就可以了,Top

21 楼liuquanyi(大狗)回复于 2005-04-17 16:06:59 得分 5

kingfish(八百里秦川@龙城异客)     高手!  
   
  反射的经典用法!  
   
  Top

22 楼fuwang(古代是many to one,过去是one to one,现在是many to many)回复于 2005-04-17 17:25:35 得分 10

public   class   TestClass{  
  public   static   void   main(String[]   args){  
  String   s=new   String("Str");  
        try{  
            String   o=(String)Class.forName(s).newInstance();  
          System.out.println(o);  
  }  
                  catch(Exception   e){  
  e.printStackTrace();  
  }  
  }  
  }  
  怎么报找不到类的错误?Top

23 楼jbas(jbas)回复于 2005-04-18 12:19:30 得分 0

public   class   Test1  
  {  
   
   
    public   Test1(){  
        System.out.println("Test1");  
    }  
   
   
   
    public   void   showTest(){  
        System.out.println("showTest();");  
    }  
   
    public   void   showTest2(String   s,String   y){  
          System.out.println(s+":"+y);  
    }  
  }  
   
   
   
  import   java.lang.reflect.*;  
   
  public   class   TestMain  
  {  
    public   TestMain(){  
     
        System.out.println("TestMain();");  
    }  
   
    public   static   void   main(String[]   args){  
    String   classNm   =   "Test1";  
          String   methodNm   =   "showTest2";  
    try{  
          Class   clazz   =   Class.forName(classNm);  
          Method   method   =   clazz.getMethod(methodNm,   new   Class[]   {Class.forName("java.lang.String"),Class.forName("java.lang.String")});   //   get   method   with   no   arguments;  
          Object   obj   =   clazz.newInstance();  
          method.invoke(obj,   new   Object[]{"xxxx","yyyy"});   //   invoke   the   method   on   that   specific   intance  
    }catch(Exception   e){  
        System.out.println(e.getMessage());  
    }  
    }  
  }    
   
  可以了Top

相关问题

  • 怎样将长字符串转换为包含"..."的字符串?
  • 怎样把字符串转换成ID?
  • 怎样将char* 指向的字符串转换成 wchar* 字符串?
  • 怎样才能将String型的字符串转换成int型,如将"123"?转换为123?
  • 字符串转换
  • 字符串转换
  • 字符串转换
  • 怎样将一个字符串转换成16进制数,又怎样转换回字符串?
  • 如何把string转换成array of char字符串?
  • 如何将字符类转换成String字符串类?

关键词

  • 转换
  • stringbuffer
  • 字符串
  • 类
  • forname
  • showtest
  • newinstance
  • 知道
  • testmain
  • myclass

得分解答快速导航

  • 帖主:jbas
  • lxleaves
  • jFresH_MaN
  • lxleaves
  • kingfish
  • hongyan2004
  • liuquanyi
  • fuwang

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo