我正在尝试找出从大约60个文本字段读取数据的最佳方法,然后以间隔线打印。
例如
System.out.println(field1.getText()+“”+ field2.getText());
问题是,我不想有一个getText()方法的垃圾负载。
所以我的主要问题是,是否有一种更简单,也许更好(以性能为导向)的方法来做到这一点?
图像: my text fields
答案 0 :(得分:1)
您可以使用StringBuilder而不是字符串连接来获得更好的性能:
StringBuilder s = new StringBuilder();
s.append(field1.getText()).append(" ")
.append(field2.getText()).append(" ")
.append(field3.getText());
System.out.println(s.toString());
如果您的字段存储在一个集合中,您可以迭代该集合而不是调用每个字段:
List<JTextField> fields = new ArrayList<JTextField> ();
for(int i = 0; i < 30; i++) {
fields.add(new JTextField(Integer.toString(i)));
}
//...
StringBuilder s = new StringBuilder();
for (JTextField t : fields) {
s.append(t.getText()).append(" ");
}
//...
答案 1 :(得分:1)
我想不出任何其他表现更好的方法。
首先,
其次,
答案 2 :(得分:0)
将您的字段添加到数组或集合中,然后在for-each循环中迭代它们,打印出输出。
对类使用反射,通过某些命名约定来标识字段,如正则表达式textField.+
编写自己的注释,使其在运行时可保留,并注释要访问的每个字段,然后使用反射迭代类字段,检查注释,并打印文本字段的值(如果它)附有注释。
具有良好的命名约定/模式,2是最好的。 3.有点重量级,但非常精确和灵活。 1.也是一个快速而简单的黑客。
答案 3 :(得分:0)
您可以尝试使用反射。性能方面,它会慢一些:
public class Snippet {
JTextField field1 = new JTextField("1");
JTextField field2 = new JTextField("2");
JTextField field3 = new JTextField("3");
JTextField field4 = new JTextField("4");
// add more fields here
public static void main(String[] args) throws Exception {
new Snippet().run();
}
private void run() throws Exception {
for (int i = 1; i <= 4; i += 2) {
JTextField textfieldA = getTextField(i);
JTextField textfieldB = getTextField(i + 1);
System.out.println(textfieldA.getText() + " " + textfieldB.getText());
}
}
private JTextField getTextField(int i) throws NoSuchFieldException, IllegalAccessException {
Field field = Snippet.class.getDeclaredField("field" + i);
JTextField textfield = (JTextField) field.get(this);
return textfield;
}
}
这很快,很脏,从长远来看,最好将文本字段放入适当的数据结构(例如List或Map),然后简单地迭代它。