我有一种情况,我希望允许用户填写表单,其中输入数据是字符串值或布尔值的列表。这非常类似于任何手机上的设置列表,一系列字符串值和切换。
所以,我有一个Field
对象定义如下:
public class Field<T> {
private T value;
...
private T getValue() {
return value;
}
}
问题是当我在RecyclerView
中显示这些内容或者只是从Map
中获取值时,没有安全的方法来知道值是什么类型,字符串或布尔值。 / p>
因此,我最终得到了很多(String)field.getValue()
和((Field<String>)field).setValue("someString")
。有没有办法完全避免施法?我完全乐于改变我对这个Field
对象的设计方法,我只是希望它是干净的。
我已经考虑过使用getStringValue()
和getBooleanValue()
这样的方法,以便调用者知道它在运行时获取String或Boolean,但这会导致每个字段都有一个返回有效对象的方法,而其他方法返回null。我希望调用者不必须知道它回来了什么。
感谢您的帮助!
更新
以下是我如何从LinkedHashMap访问字段并使用它们创建Person
对象的示例:
// Create the map in one place
LinkedHashMap<String, Field> fields = new LinkedHashMap<(PERSON_FIELDS_NUM);
fields.put(Constants.Field.FIRST_NAME_KEY, new Field(Constants.Field.FIRST_NAME_KEY, "First Name", "Tap to enter"));
fields.put(Constants.Field.LAST_NAME_KEY, new Field(Constants.Field.LAST_NAME_KEY, "Last Name", "Tap to enter"));
// ...Grab fields in another
Person person = new Person();
Field firstName = this.fields.get(Constants.Field.FIRST_NAME_KEY);
Field lastName = this.fields.get(Constants.Field.LAST_NAME_KEY);
person.setFirstName((String)firstName.getValue());
person.setLastName((String)lastName.getValue());