我有一个程序,我需要将Class对象存入String,然后将其存储到内存中。是否可以将String转换回原始类,以便我可以使用该类变量?我在JAVA做这个。
示例:test.java
class hello{
public String h1;
public String h2;
}
public class test {
public static void main(String[] args)
{
hello h = new hello();
h.h1 = "hello";
h.h2 = "world";
String s = h.toString();
System.out.println("Print s : "+s);
// Now I need to convert String s into type hello so that
// I can do this:
// (hello)s.h1;
// (hello)s.h2;
}
}
注意:这不是作业,这是个人项目,如果有人能提供帮助,我将不胜感激!
谢谢! 的Ivar
答案 0 :(得分:3)
这可能会有所帮助:
http://www.javabeginner.com/uncategorized/java-serialization
http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html
编辑添加
toString()
与序列化不同。这仅仅是对阶级的描述;列出类等的特定实例的某些值。
答案 1 :(得分:2)
我认为您要做的是序列化。你对你的评论感到困惑:
// Now I need to convert String s into type hello so that
// I can do this:
// (hello)s.h1;
// (hello)s.h2;
您不能只将String对象转换为任意类类型。也许你可以详细说明你在这里想要完成的事情。如果您希望能够将类“保存”到文件中,然后将其作为对象读回,则需要序列化。像这样:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Hello implements Serializable {
public String h1;
public String h2;
@Override
public String toString() {
return "{ h1: " + h1 + ", h2: " + h2 + " }";
}
public static void main(String[] args) throws Exception {
Hello h = new Hello();
h.h1 = "hello";
h.h2 = "world";
ObjectOutputStream outstream = new ObjectOutputStream(new FileOutputStream("hello.ser"));
outstream.writeObject(h);
System.out.println("1) h: " + h);
h = null;
System.out.println("2) h: " + h);
ObjectInputStream instream = new ObjectInputStream(new FileInputStream("hello.ser"));
h = (Hello) instream.readObject();
System.out.println("3) h: " + h);
}
}
当字段比String更复杂时,它会变得更复杂。实现Serializable只是一个“标记”接口,表示该对象可以被序列化,它不需要任何方法来实现。您的简单类只需要使用ObjectOutputStream写出来,并可以使用ObjectInputStream进行回读。
答案 2 :(得分:1)
我认为你需要做的是研究序列化/反序列化。
答案 3 :(得分:1)
答案 4 :(得分:0)
如果您复制了对象问候语,那么您不必担心更改回原始对象。
Hello h = new Hello();
Hello copyH = h;
答案 5 :(得分:0)
我有一个我需要的程序 通过
将Class对象存储到内存中
创建对象后,它已经位于内存中,如果要缓存它,可以将其放入HashMap中以供以后访问。
将其投射到String中。
没有从String到Object的转换,反之亦然。
是否可以转换字符串 回到原来的班级让我 可以使用那个类变量吗?
Java序列化是二进制的。要将对象状态转换为String,您有几个选项。
答案 6 :(得分:0)
您可以使用JavaBeans机制并实现PropertyEditor。您仍然需要自己实现字符串到对象的解析,如果您的对象很复杂,您需要在PropertyEditor中使用大量逻辑来解析整个String。但是,当你准备好简单类型的编辑器时,很容易在更复杂的编辑器中使用它们。
当然,如果你不是绝对需要对象的String表示,你应该像其他人建议的那样研究序列化。
答案 7 :(得分:0)
如果你真的需要做类似的事情,你可以覆盖类中的toString()方法,并创建一个静态方法(或创建一个转换器类),从它的toString()返回一个Hello对象。像这样:
class Hello() {
public String h1;
public String h2;
public String toString() {
return "h1:" + h1 +", h2:" + h2;
}
public static Hello fromString(String input) {
Hello hello = new Hello();
hello.h1 = // Some logic to extract h1 from input
hello.h2 = // Some logic to extract h2 from input
return hello;
}
}
这样你应该能够:
Hello hello = new Hello();
String helloString = hello.toString();
Hello newHello = Hello.fromString(helloString);
我鼓励您查看序列化(与其他人一样)或查找您的真正问题以及解决问题的最佳方法。