簡體   English   中英

java泛型T擴展了Simpletype嗎?

[英]java generics T extends Simpletype?

我想寫一個方法,如果可能的話,它會返回一些基本類型,例如float,integer,boolean和String。 我想為其使用泛型,但我堅持並沒有找到解決方案。 我確實需要它用於Configparser。 不適用於從Config獲取不同的值。

當前它看起來像這樣,我知道該開關不能像這樣工作,但是您可以了解id的作用:

public class ConfigurationManager extends XmlReader {
    private final static String FILE_PATH = "config/config.cfg";
    private static Element xml;

    public ConfigurationManager() throws IOException {
        FileHandle handle = Gdx.files.internal(FILE_PATH);
        this.xml = this.parse(handle);
    }

    public Resolution getResolution() {
        Resolution r = new Resolution();
        r.height = xml.getFloat("height");
        r.width = xml.getFloat("width");
        return r;
    }

    public static <T> T getConfig(Class<T> type, String name) {
        if (type.equals(Integer.class)) {
            return type.cast(xml.getInt(name));
        } else if (type.equals(Float.class)) {
            return type.cast(xml.getFloat(name));
        } else if (type.equals(Boolean.class)) {
            return type.cast(xml.getBoolean(name));
        } else if (type.equals(String.class)) {
            return type.cast(xml.get(name));
        }
        throw new AssertionError("Invalid type");
    }
}

非常感謝

好吧,我不認為您可以直接使用原始類型來實現,但是類似這樣的事情呢:

public static <T> T getConfig(Class<T> type, String name) {
   if(type.equals(Integer.class)){
    return type.cast(xml.getInteger(name));
   } else if(type.equals(Float.class)){
    return type.cast(xml.getFloat(name));
   } else if(type.equals(Double.class)) {
    return type.cast(xml.getDouble(name));
   } else if(type.equals(String.class)) {
    return type.cast(xml.getString(name));
   } 
   throw new AssertionError("Invalid type");
}

您可以使用Enum來避免分支邏輯和顯式強制轉換。

public enum TypeSelector {
    INTEGER() {
        @Override
        public Integer getValue(Elements xml, String name) {
            return xml.getInteger(name);
        }
    },

    DOUBLE() {
        @Override
        public Double getValue(Elements xml, String name) {
            return xml.getDouble(name);
        }
    };

     private static final Map<Class<?>, TypeSelector> SELECTORS = new HashMap<Class<?>, TypeSelector>() {
            {
                put(Integer.class, INTEGER);
                put(Double.class, DOUBLE);

            }
    };

    public static <T> TypeSelector getSelectorForType(Class<T> c) {
       TypeSelector selector = SELECTORS.get(c);
       if (selector == null) {
          throw new AssertionError("Invalid type");
       }
       return selector;
    }

    public abstract <T> T getValue(Elements xml, String name);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM