泛型限定问题

简介: 泛型限定问题

双木非林,田下有心。——顾城

首先看这段代码:

import java.util.function.Function;
class Scratch {
    static class RoleInfo {
    }
    public static void main(String[] args) {
        // 想让这两个通过
        test(Object::hashCode, RoleInfo::hashCode, new RoleInfo());
        test(Object::toString, RoleInfo::toString, new RoleInfo());
        // 想让这个报错
        test(Object::hashCode, RoleInfo::toString, new RoleInfo());
    }
    public static <T, A, R>
    void test(Function<T, R> a,
              Function<A, R> b,
              T ad) {
    }
}


可以看到test方法的第0、1参数分别是Function以及Function

但这里却一致编译运行通过

最后使用了超类型限定解决了,我们可以看到IntegerString都实现了Comparable接口并限定了其类型:

String

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {}

Integer

public final class Integer extends Number implements Comparable<Integer> {}

那么我们这里就可以利用这个特性:

import java.util.function.Function;
class Scratch {
    static class RoleInfo {
    }
    public static void main(String[] args) {
        // 想让这两个通过
        test(Object::hashCode, RoleInfo::hashCode, new RoleInfo());
        test(Object::toString, RoleInfo::toString, new RoleInfo());
        // 想让这个报错
        test(Object::hashCode, RoleInfo::toString, new RoleInfo());
    }
    public static <T, A, R extends Comparable<R>>
    void test(Function<T, R> a,
              Function<A, R> b,
              T ad) {
    }
}

达成效果:

相关文章
|
8月前
|
设计模式 算法 安全
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
169 1
|
8月前
|
Java Go
【Java 泛型方法】泛型方法的定义和使用,泛型的通配符和泛型的上下限,泛型的注意事项
【Java 泛型方法】泛型方法的定义和使用,泛型的通配符和泛型的上下限,泛型的注意事项
|
Java 编译器 C++
常量接口 vs 常量类 vs 枚举区别
把常量定义在接口里与类里都能通过编译,那2者到底有什么区别呢?
87 0
|
安全 Java 容器
Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用
Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用
178 0
Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用
|
安全 Java
Java泛型03:通配符的使用和泛型的继承
Java泛型03:通配符的使用和泛型的继承
232 0
Java泛型03:通配符的使用和泛型的继承
C#编程-103:自定义泛型类
C#编程-103:自定义泛型类
C#编程-103:自定义泛型类
|
存储 XML C#
c#利用反射实现对类中的常量进行取值和对应常量的注释
原文:c#利用反射实现对类中的常量进行取值和对应常量的注释 因为业务需要,项目中有大量的错误码,还是通过分部类编写,报错之后返回一个错误码,无处可以方便的查询, 后来发现代码中每个错误码都有定义,而且都还有注释,因此考虑通过反射实现读取然后格式化形成错误码文档方便参阅。
1837 0