在Java中将类转换为字符串,反之亦然

时间:2010-04-15 04:03:50

标签: java

我有一个程序,我需要将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

8 个答案:

答案 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)

序列化和反序列化:
http://en.wikipedia.org/wiki/Serialization

答案 4 :(得分:0)

如果您复制了对象问候语,那么您不必担心更改回原始对象。

 Hello h = new Hello();

 Hello copyH = h;

答案 5 :(得分:0)

  

我有一个我需要的程序   通过

将Class对象存储到内存中

创建对象后,它已经位于内存中,如果要缓存它,可以将其放入HashMap中以供以后访问。

  

将其投射到String中。

没有从String到Object的转换,反之亦然。

  

是否可以转换字符串   回到原来的班级让我   可以使用那个类变量吗?

Java序列化是二进制的。要将对象状态转换为String,您有几个选项。

  • 将成员打印到String并使用StringTokenizer拆分String并分配(可能需要转换除String以外的数据类型)

  • 使用libcsv

  • 之类的内容
  • 使用XML作为对象状态的String表示。在java中,您可以使用我更喜欢的JAXB

答案 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);

我鼓励您查看序列化(与其他人一样)或查找您的真正问题以及解决问题的最佳方法。