假设我有一个这样的类(并进一步假设所有私有变量:
public class Item {
private String _id = null;
private String _name = null;
private String _description = null;
...
}
现在,如果要构建此类的toString()表示形式,则可以在Item类中执行以下操作:
@Override
public String toString() {
return (_id + " " + _name + " " + _description);
}
但是,如果我在类中说了15个私有变量,该怎么办?我是否需要像这样写出每个变量的名称?
理想情况下,我想遍历该类的私有变量列表并构造字符串表示形式来结束任务:
@Override
public String toString() {
ArrayList<String> members = getClass().getMembers(); //Some method like this
String string = "";
for(...)
string += members[i] + " ";
}
也许是toJSON方法,我仍然需要访问这些变量的名称。有什么建议?
您可以这样做:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getName());
sb.append(": ");
for (Field f : getClass().getDeclaredFields()) {
sb.append(f.getName());
sb.append("=");
sb.append(f.get(this));
sb.append(", ");
}
return sb.toString();
}
不要
使用字符串串联来构造15个数据成员的最终结果,特别是如果toString()
将调用很多。内存碎片和开销可能确实很高。使用StringBuilder
构建大动态的字符串。
我通常让我的IDE(IntelliJ)toString()
为我简单地生成方法,而不是为此使用反射。
另一种有趣的方法是使用Project
Lombok中
的@ToString批注:
import lombok.ToString; @ToString(excludes="id") public class ToStringExample { private static final int STATIC_VAR = 10; private String name; private Shape shape = new Square(5, 10); private String[] tags; private int id; @ToString(callSuper=true, includeFieldNames=true) public static class Square extends Shape { private final int width, height; public Square(int width, int height) { this.width = width; this.height = height; } } }
我发现这比Jakarta Commons toString构建器更可取,因为这种方法具有更高的可配置性,并且也是在编译时而非运行时构建的。
问题内容: 假设我定义了以下类型: 我将如何以编程方式将类型作为字符串获取,因此以后可能很容易重构,而不是: 我不太喜欢,因为它实例化了它,也可以从Interface实例化。 问题答案: 您可以使用包装(包装也可以在内部使用)。您可以从 指向 该类型的 指针 开始,并使用没有分配的 类型化_指针值,并且可以使用来从其描述符导航到指针的 _基本 类型(或 元素 类型)的描述符。 例: 输出(在Go
我想在JComboBoxe中显示我的名为CodeA(类型为String)的变量中的每个项。我有一条错误消息: 我不明白和之间的转换 编辑:在此处输入图像描述
问题内容: 我有一个C python扩展名,我想打印一些诊断信息。 我收到一个字符串作为PyObject *。 获取此对象的字符串表示形式(使其可用作const char *)的规范方法是什么? 更新: 澄清以强调访问为const char *。 问题答案: 使用(模仿Python的函数)或(模仿),然后调用get (您可以并且通常应该将其用作,例如: 任何人都可以使用此方法。如果您完全确定是Py
问题内容: 对于我的应用程序,字符串是否为人类可读的都没有关系。 问题答案: 将结构编码为字符串的一种流行方法是使用JSON。 您有某些限制,例如无法获取所有信息(例如,每个字段的特定类型),仅序列化导出的字段以及不处理递归值。但这是序列化数据的简单标准方法。 工作示例: 给出以下输出: https://play.golang.org/p/sx-xdSxAOG
问题内容: 如何在基于字符串的PHP中获取属性?我给它打电话。那是什么? 就像… 问题答案: 像这样 或者,如果您可以控制该类,请实现ArrayAccess接口,然后执行此操作
如果我有一个子类,如何将类名获取为string?我试过做,但这会返回对象,而不是。