我在“自动”转换属性时遇到了一些麻烦。
public abstract class MyType<T> {
public abstract T getValue(String content);
}
public class MyString extends MyType<String> {
@Override
public String getValue(String content) {
return String.valueOf(content);
}
}
public class MyInteger extends MyType<Integer> {
@Override
public Integer getValue(String content) {
return Integer.valueOf(content);
}
}
public class User {
private String _name;
private int _id;
public void setName(String name) {
_name = name;
}
public String getName() {
return _name;
}
public void setId(int id) {
_id = id;
}
public int getId() {
return _id;
}
}
public class MainTest {
public static void main(String[] args) {
ArrayList<MyType> myTypes = new ArrayList<MyType>();
myTypes.add(new MyString());
myTypes.add(new MyInteger());
User user = new User();
for (MyType myType : myTypes) {
try {
user.setName((String) myType.getValue("foobar")); // getValue always returns an Object that I have to parse
user.setId((Integer) myType.getValue("42")); // getValue always returns an Object that I have to parse
} catch (Exception e) {
}
}
}
}
请记住,这只是我的问题的一个抽象示例。
如何更换铸件?我需要这样的东西:
user.setName((user.getName().getClass()) myType.getValue("foobar"));
不幸的是,eclipse告诉我这是错误的The method getValue(String) is undefined for the type Class<capture#3-of ? extends String>
我不会明确地投射。我会更加隐式/自动地投射。