我在java中使用泛型的新手,我有简单的方法,我想从中返回任何类型,此方法返回其他类getters
方法,例如我有{{1} } class和channels
方法,我想从这个方法返回:
getChannelId()
@SuppressWarnings("unchecked")
public <T extends Channels> T getChannelColumn(ChannelContentModel.channelColumns column) {
switch (column) {
case id:
return (T) channel.getId();
break;
case title:
return (T) channel.getChannelTitle();
break;
}
return null;
}
是int,getId
是字符串,如何修复此方法以返回任何类型?
getChannelTitle
中的是channel
类的实例,提前致谢
答案 0 :(得分:0)
由@Geckstar评论;
Java是静态类型的
但是可以从编译错误中清除代码示例。
这不是一个好的解决方案,它只能修复编译错误。但是这种方法的使用可能会导致运行时失败。
@SuppressWarnings("unchecked")
public <T extends Object> T getChannelColumn(ChannelContentModel.channelColumns column) {
switch (column) {
case id:
return (T) channel.getId(); //int must be Integer
case title:
return (T) channel.getChannelTitle();
}
return null;
}
答案 1 :(得分:0)
您可以创建属性包装器,它将在需要时将字符串数据格式保存为特定数据类型。
public class MyProperty {
private String stringVal;
public MyProperty(String stringVal) {
this.stringVal = stringVal;
}
public Integer getInteger() throws IllegalArgumentException {
return integerValue.getValue();
}
public String getString() {
return stringValue.getValue();
}
private PropertyValue<String> stringValue = new PropertyValue<String>() {
protected String parse(String rep) {
return rep;
}
};
private PropertyValue<Integer> integerValue = new PropertyValue<Integer>() {
protected Integer parse(String rep) throws NumberFormatException {
return Integer.valueOf(rep);
}
};
private abstract class PropertyValue<T> {
private T value;
protected abstract T parse(String rep) throws Exception;
public T getValue() throws IllegalArgumentException {
try {
value = (stringValue == null) ? null : parse(stringVal);
} catch (Exception e) {
value = null;
}
return value;
}
}
}
你可以使用具有访问方法的specialize类或一个类来获取具有指定数据类型的值
@SuppressWarnings("unchecked")
public MyProperty getChannelColumn(ChannelContentModel.channelColumns column) {
switch (column) {
case id:
return new MyProperty(channel.getId());//
break;
case title:
return new MyProperty(channel.getChannelTitle());
break;
}
return null;
}