所以我意识到toString()
类中有一个Object
方法。
但是,如何设置fromString()
方法?
public String toString() {
return "";
}
有toString()
而非fromString()
的重点是什么?或者我只是找不到它?为了澄清我正在尝试使用Gson
并且它继续将我的对象转换为其字符串表示而不是对象。
答案 0 :(得分:5)
请注意toString
的{{3}}中的以下内容:
结果应该是一个简洁但信息丰富的表示,便于人们阅读。
这种方法不太实用:它用于呈现人类可读的信息,对于调试很有用。
更具目的性的API,似乎就是你所建议的,将是非常特定于上下文的。通常,您会看到与fromString
类似的内容,例如,请参阅各种parse
方法。
我们对一般方法的最接近的是对象序列化和反序列化API(教程documentation,文档here),它仍然可用于特定实现:
序列化接口没有方法或字段,仅用于标识可序列化的语义。
这些都不能阻止您编写自己的 fromString
,但听起来您对Gson库存在特定问题。从here开始,查看各种fromJson
重载。
答案 1 :(得分:1)
很难实施。 fromString(object.toString())
应该重建对象似乎是合乎逻辑的。然后,toString()
然后必须拥有初始化该类所需的所有信息,而不仅仅是重要的东西。
例如,考虑一个ArrayList。它的toString()
仅提供其内容,在您尝试初始化之前,它似乎很好且很有用...例如,您需要正确设置其capacity
,但您没有从toString()
访问它。但是出于封装原因,你不希望在toString()
中看到它。
答案 2 :(得分:1)
没有这样的方法叫做fromString(),你需要自己实现它。逻辑上的原因似乎很简单,人们总是需要根据要求实施它。
此外,toString()
方法为您提供了一种通用的方式来以某种方式表示和传达有关该对象的一些有用信息。如果您需要与默认行为不同的行为,则可以覆盖它并提供您自己的实现。另一方面,将每个String
转换为Object
表示并不是一般要求,因此fromString()方法不存在。
答案 3 :(得分:1)
case "DateRange":
RadDatePicker rdpDateFrom = new RadDatePicker();
rdpDateFrom.CssClass = "form-control form-control-item";
rdpDateFrom.ID = "rdpDateFrom" + j.ToString() + "-" + counter;
rdpDateFrom.AutoPostBack = false;
rdpDateFrom.DatePopupButton.Visible = true;
rdpDateFrom.ShowPopupOnFocus = true;
rdpDateFrom.EnableScreenBoundaryDetection = true;
rdpDateFrom.MaxDate = DateTime.Now;
txtC1.Controls.Add(rdpDateFrom);
RadDatePicker rdpDateTo = new RadDatePicker();
rdpDateTo.CssClass = "form-control form-control-item";
rdpDateTo.ID = "rdpDateTo" + j.ToString() + "-" + counter;
rdpDateTo.AutoPostBack = false;
rdpDateTo.DatePopupButton.Visible = true;
rdpDateTo.ShowPopupOnFocus = true;
rdpDateTo.EnableScreenBoundaryDetection = true;
rdpDateTo.MaxDate = DateTime.Now;
txtC1.Controls.Add(rdpDateTo);
CompareValidator cvdpDate = new CompareValidator();
cvdpDate.ID = "cvdpDate" + j.ToString() + "-" + counter;
cvdpDate.ControlToCompare = "rdpDateFrom" + j.ToString() + "-" + counter;
cvdpDate.ControlToValidate = "rdpDateTo" + j.ToString() + "-" + counter;
cvdpDate.Operator = ValidationCompareOperator.GreaterThanEqual;
cvdpDate.Display = ValidatorDisplay.Dynamic;
cvdpDate.ErrorMessage = "End date must be equal or greater than start date - please correct dates.";
txtC1.Controls.Add(cvdpDate);
break;
旨在使其成为一种方式,以便您可以使用toString()
等将自己的自定义对象包含在文本输出中。
println()
大多数情况下,您不会在System.out.println("The value of my object is " + myObject);
中输出足够的信息,以便以后能够重新创建对象。它通常只是对象的摘要。
将对象转换为非二进制格式和从非二进制格式转换对象称为"序列化"和#34;反序列化"分别。你可以在这里阅读更多相关内容: