怎样把"String"这个字符串转换成String这个类???
我现在有一个变量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




