繁体   English   中英

Java返回类型通用

[英]Java return type generic

我是在Java中使用泛型的新手,我有一个简单的方法,我想从中返回任何类型,此方法返回其他类的getters方法,例如,我有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;
}

getId是int而getChannelTitle是字符串,如何修复此方法以返回任何类型?

在我的代码channelChannels类的实例,在此先感谢

正如@Geckstar所说;

Java是静态类型的

但是可以清除编译错误中的代码示例。

  1. 删除中断,因为在return语句后无需中断。
  2. 从对象扩展返回类型。 T扩展对象而不是T扩展通道
  3. id必须是Integer,而不是int或更改为(T)(Integer)channel.getId()

这不是一个好的解决方案,它只能解决编译错误。但是此方法的使用可能会导致运行时失败。

@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;
}

您可以创建属性包装器,该包装器将在需要时以字符串数据格式保存该值,它将转换为特定的数据类型。

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;
    }
}

}

您可以使专门化类或具有访问方法的一个类来获取具有指定数据类型的值

   @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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM