美文网首页
谈谈java的泛型

谈谈java的泛型

作者: 田文健 | 来源:发表于2020-03-13 20:51 被阅读0次

今天写代码遇到个问题,如下

@Bean
    public Converter<String, LocalDateTime> localDateTimeConverter() {
        return new Converter<String, LocalDateTime>() {
            @Override
            public LocalDateTime convert(String source) {
                return StringUtils.isNotBlank(source) ? LocalDateTime.parse(source, DateTimeFormatter.ISO_LOCAL_DATE_TIME) : null;
            }
        };
    }

这个bean在Spring中可以创建的。然后IDEA“智能”的提醒我这个可以写成lambda

@Bean
    public Converter<String, LocalDateTime> localDateTimeConverter() {
        return source -> StringUtils.isNotBlank(source) ? LocalDateTime.parse(source, DateTimeFormatter.ISO_LOCAL_DATE_TIME) : null;
    }

嗯,这样看起来简洁多了,然后运行,报错:
java.lang.IllegalArgumentException: Unable to determine source type <S> and target type <T> for your Converter

what?换种写法就错了?然后想到是泛型的问题,再读了一些泛型的资料,明白其中的原因.

具体就是lambda没有指定泛型参数类型,所以Spring框架拿到的对象的类是Converter<Onject, Object>,他就不知道要转换什么参数了。(Java虽然不能在运行时获取对象泛型类型,但可以获取类定义的泛型参数)

所以如果要lambda有泛型参数,必须见定义一个接口继承Converter同时指定泛型参数。

相关文章

  • Java 泛型擦除原理

    问:请比较深入的谈谈你对 Java 泛型擦除的理解和带来的问题认识? 答:Java 的泛型是伪泛型,因为在编译期间...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • 谈谈Java的泛型

    前言 JDK1.5号称是Java最重要的版本更新,而泛型又是JDK1.5中一个最重要的特征。使用泛型机制编写的程序...

  • 谈谈java的泛型

    今天写代码遇到个问题,如下 这个bean在Spring中可以创建的。然后IDEA“智能”的提醒我这个可以写成lam...

  • Kotlin 泛型

    说起 kotlin 的泛型,就离不开 java 的泛型,首先来看下 java 的泛型,当然比较熟悉 java 泛型...

  • 第二十八课:泛型

    泛型出现之前 泛型出现之后 Java深度历险(五)——Java泛型

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • JAVA 核心笔记 || [xxx] 泛型

    泛型 JAVA 的参数化类型 称为 泛型 泛型类的设计 Learn12.java 运行

  • Java泛型—Java语法糖,只在编译有作用,编译后擦出泛型

    Java泛型—Java语法糖,只在编译有作用,编译后擦出泛型 在代码进入和离开的边界处,会处理泛型 Java泛型作...

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

网友评论

      本文标题:谈谈java的泛型

      本文链接:https://www.haomeiwen.com/subject/xnsyshtx.html