Java 包含泛型方法签名的方法调用,如: Map buildH

2019-06-22  本文已影响0人  架构师Javaspring

今天在用Guava做cache的时候,发现guava中,有些方法会带有泛型的方法签名:

public CacheBuilder<K, V> expireAfterAccess(long duration, TimeUnit unit) {

    checkState(

        expireAfterAccessNanos == UNSET_INT,

        "expireAfterAccess was already set to %s ns",

        expireAfterAccessNanos);

    checkArgument(duration >= 0, "duration cannot be negative: %s %s", duration, unit);

    this.expireAfterAccessNanos = unit.toNanos(duration);

    return this;

  }

public <K1 extends K, V1 extends V> LoadingCache<K1, V1> build(

      CacheLoader<? super K1, V1> loader) {

    checkWeightWithWeigher();

    return new LocalCache.LocalLoadingCache<K1, V1>(this, loader);

  }

但是,直接使用CacheBuilder的时候,并没有直接指定K,V泛型,所以很好奇它是如何调用的,于是乎做了一个尝试:

有这么一个方法:

public <K, V> Map<K, V> buildHashMap() {

        return new HashMap<K, V>();

}

尝试调用它:

    @Test

    public void test() {

        Map<Object, Object> map = this.buildHashMap();//如果你使用的是idea,点击alt+enter,会自动生成 "Map<Object,Object> map ="这一段.

    }

换一种方式:

    @Test

    public void test() {

        Map<Integer, String> map = this.<Integer, String>buildHashMap();

    }

好了,可以自动补全并推断出 ,实例map的类型.

上一篇 下一篇

猜你喜欢

热点阅读