在Java中将类强制转换为字符串,反之亦然
我有一个程序,在其中我需要通过将类对象转换为字符串来将其存储到内存中。是否可以将字符串转换回原始类,以便使用该类变量?我正在用JAVA做这件事 示例:test.java在Java中将类强制转换为字符串,反之亦然,java,Java,我有一个程序,在其中我需要通过将类对象转换为字符串来将其存储到内存中。是否可以将字符串转换回原始类,以便使用该类变量?我正在用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";
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我认为你需要做的是研究序列化/反序列化。我认为你需要做的是研究序列化/反序列化。序列化和反序列化:
序列化和反序列化:
这可能会有帮助: 编辑添加
toString()
与序列化不同。那只是对阶级的描述;列出该类的特定实例的一些值等。这可能会有帮助:
编辑添加
toString()
与序列化不同。那只是对阶级的描述;列出该类的特定实例的一些值等等。我认为您要做的是序列化。我对你的评论感到困惑:
// Now I need to convert String s into type hello so that
// I can do this:
// (hello)s.h1;
// (hello)s.h2;
不能将字符串对象强制转换为任意类类型。也许你可以详细说明你在这里想要完成什么。如果希望能够将类“保存”到文件中,然后将其作为对象读回,则需要序列化。像这样:
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);
}
}
当字段是比字符串更复杂的类时,它会变得更复杂。实现Serializable只是一个“标记”接口,表示对象可以序列化,它不需要实现任何方法。您的简单类只需要使用ObjectOutputStream写出,并且可以使用ObjectInputStream读回。我认为您要做的是序列化。我对你的评论感到困惑:
// Now I need to convert String s into type hello so that
// I can do this:
// (hello)s.h1;
// (hello)s.h2;
不能将字符串对象强制转换为任意类类型。也许你可以详细说明你在这里想要完成什么。如果希望能够将类“保存”到文件中,然后将其作为对象读回,则需要序列化。像这样:
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);
}
}
当字段是比字符串更复杂的类时,它会变得更复杂。实现Serializable只是一个“标记”接口,表示对象可以序列化,它不需要实现任何方法。您的简单类只需要使用ObjectOutputStream写出,并可以使用ObjectInputStream读回。如果您复制了对象hello,则不必担心更改回原始对象
Hello h = new Hello();
Hello copyH = h;
如果复制对象hello,则不必担心更改回原始对象
Hello h = new Hello();
Hello copyH = h;
我有一个计划,我需要
通过以下方式将类对象存储到内存中
创建一个对象后,它已经位于内存中,如果您想缓存它,可以将其放入HashMap中供以后访问
把它铸成线
没有从字符串到对象的转换,反之亦然
可以转换字符串吗
回到原来的班级,让我
可以使用那个类变量吗
Java序列化是二进制的。要将对象状态转换为字符串,有几个选项
- 将成员打印为字符串,并使用StringTokenizer拆分字符串并分配(这可能需要转换字符串以外的数据类型)
- 使用类似
- 使用XML作为对象状态的字符串表示。在java中,您可以使用我更喜欢的语言
- 将成员打印为字符串,并使用StringTokenizer拆分字符串并分配(这可能需要转换字符串以外的数据类型)
- 使用类似
- 使用XML作为对象状态的字符串表示。在java中,您可以使用我更喜欢的语言
当然,如果您不一定需要对象的字符串表示,您应该像其他人建议的那样研究序列化。您可以使用JavaBeans机制并实现一个。您仍然需要自己实现字符串到对象的解析,如果您的对象很复杂,则需要PropertyEditor中的大量逻辑才能解析整个字符串。但是,当您准备好简单类型的编辑器时,在更复杂的编辑器中使用这些编辑器是很容易的
当然,如果您不一定需要对象的字符串表示,您应该像其他人建议的那样研究序列化。如果您确实需要这样做,您可以重写类中的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);
我鼓励您检查序列化(正如许多其他人所做的那样),或者找出真正的问题所在以及解决问题的最佳方法