如何获取地图类型的类

时间:2019-01-25 04:27:31

标签: java generics java-8

我必须在Map<String, CountryConfig>行中传递new CouchbaseDAO<>(cbClientProvider, new CountryConfigKeyProvider(), class);的类类型,以代替第三个参数中的类。但是它没有接受,我已经尝试过像Map.class n HashMap.class

private static CouchbaseDAO<CountryConfigKey, Map<String, CountryConfig>> getCountryConfigDAO(
            CouchbaseClientProvider cbClientProvider) {
        return new CouchbaseDAO<>(cbClientProvider, new CountryConfigKeyProvider(), Map.class);
    }

Couchbase构造函数:

public CouchbaseDAO(CouchbaseClientProvider couchProvider, CouchbaseKeyProvider<K> keyProvider, Class<T> dataClass) {
        this(OBJECT_MAPPER, couchProvider, keyProvider, dataClass, RetryableCouchbaseTask.NO_RETRIES);
    }

1 个答案:

答案 0 :(得分:0)

首先,如果没有在类级别或方法级别上声明泛型,则不能在方法/构造函数定义中使用泛型。

CouchbaseDAO构造函数中,您使用的是泛型类型<K><T>。为此,您应该使用这两种类型声明类CouchbaseDAO。如果您还没有这样做,请在类似

的构造函数中声明它

public <K, T> CouchbaseDAO(...) {...}

如果您只是想接受任何类型,则可以跳过通用类型,而使用通配符字符?

因此,要将Class类型传递给构造函数,您的定义应为Class<?>,并且 Class<T>

CouchbaseKeyProvider<K>也是如此。