【问题标题】:RedisTemplate `execute` type mismatchRedisTemplate `execute` 类型不匹配
【发布时间】:2021-03-07 00:31:41
【问题描述】:
    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @Resource
    private RedisTemplate defaultRedisTemplate;



RedisScript<Boolean> redisScript = new DefaultRedisScript(Test, Boolean.class);

  // this line is OK, stringRedisTemplate.execute returns boolean
  boolean result1 = stringRedisTemplate.execute(redisScript, Arrays.asList(key), value);
  
  // line blow indicates type mismatch, defaultRedisTemplate.execute returns Object
  boolean result2 = defaultRedisTemplate.execute(redisScript, Arrays.asList(key), value);

为什么defaultRedisTemplate.execute 的返回类型是对象而不是布尔值?

【问题讨论】:

    标签: spring redis spring-data-redis


    【解决方案1】:
    public interface RedisOperations<K,V> {
        public <T> T execute(RedisScript<T> script, List<K> keys, Object... args)
    }
    
    public class StringRedisTemplate extends RedisTemplate<String,String> {}
    

    当从原始类型类调用泛型方法时,这是预期的编译时行为。

    另一方面,StringRedisTemplate 是一个伪类型,因为它的超类类型参数 RedisTemplate 如上所述。

    这就是字符串redis模板变体编译成功的原因。

    如果您要传递泛型变体,代码将可以正常编译。

    @Resource
    private RedisTemplate<String, Object> defaultRedisTemplate;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2014-01-08
      • 2012-08-27
      相关资源
      最近更新 更多