我上课了
public class ValueObject<T> {
private T value;
public void setValue(T value){
this.value = value
}
}
在另一个类中,我从第一个类中获得了一个对象数组
ArrayList<ValueObject<?>> valueObjects = new ArrayList<>();
ArrayList<String> valueNames = new ArrayList<>();
现在我想编写一个Methode,它在第二个数组中查找名称,并为该arrayList中第一个对象的实例分配一个新值
ValueObject<?> get(String name) {
return valueObjects.get(valueNames.indexOf(name));
}
public <T> void set(String name, T value) {
get(name).setValue(value);
}
但我不能让这个工作。我需要写点东西吗?在set()方法?
谢谢=)
答案 0 :(得分:1)
您没有提供完整的示例,因此不确定哪个会对您有所帮助。
版本1,如果您可以使用List<ValueObject<T>>
,因为所有ValueObjects
都拥有相同的类型。
static class Lookup<T2> {
List<ValueObject<T2>> valueObjects = new ArrayList<>();
List<String> valueNames = new ArrayList<>();
ValueObject<T2> get(String name) {
return valueObjects.get(valueNames.indexOf(name));
}
public void set(String name, T2 value) {
get(name).setValue(value);
}
}
版本2,如果valueObjects
确实包含ValueObject
包含不同的类:
@SuppressWarnings("unchecked")
static class Lookup2 {
List<ValueObject<?>> valueObjects = new ArrayList<>();
List<String> valueNames = new ArrayList<>();
/* unsafe get */
ValueObject<?> get(String name) {
return valueObjects.get(valueNames.indexOf(name));
}
/* set using unsafe get */
public <T> void setUnsafe(String name, T value) {
/* might add handling of runtime exceptions */
((ValueObject<T>)get(name)).setValue(value);
}
/* safe get when client knows class */
<T> ValueObject<T> get(String name, Class<T> clazz) {
/* might do instanceOf check here to throw custom exception */
return (ValueObject<T>) valueObjects.get(valueNames.indexOf(name));
}
/* set using safe get */
public <T> void set(String name, T value) {
/* might add handling of runtime exceptions */
get(name, (Class<T>) value.getClass()).setValue(value);
}
}