首页 > 解决方案 > 这两个代码有什么区别吗?

问题描述

@Autowired
private StringRedisTemplate stringRedisTemplate;

public void test(String key) {
    // IDEA prompts an error
    Map<String, String> entries1 = stringRedisTemplate.opsForHash().entries(key);
        
    // This is OK.
    HashOperations<String, String, String> opsForHash = stringRedisTemplate.opsForHash();
    Map<String, String> entries = opsForHash.entries(key);  
}

标签: java

解决方案


问题是该方法opsForHash()使用了 2 个泛型,这是签名:

public <HK, HV> HashOperations<K, HK, HV> opsForHash()

如果要使用单行,则需要设置泛型,就像:

Map<String, String> entries1 = stringRedisTemplate.<String, String>opsForHash().entries(key);

在您的代码中,第二种方法有效,因为编译器从运算符左侧的已定义变量中找出泛型=


推荐阅读