gpt4 book ai didi

java - 如何确保字段在编译时实现接口(interface)

转载 作者:行者123 更新时间:2023-12-04 05:14:07 25 4
gpt4 key购买 nike

我正在根据 Generic Comparator 上显示的示例构建一个用作通用比较器的 java 类.我为比较器构建的构造函数如下:

public GenericComparator(java.lang.reflect.Field sortField, boolean ascending){
.... }

虽然上面的构造函数允许我获取排序字段,但编译器无法知道该字段是否正在实现 Comparable接口(interface)和调用构造函数的开发人员可能会传递未实现 Comparable 的字段界面。

我想知道是否有办法使它成为编译时错误,而不是在运行时使用 instanceof 检查来处理它,以确保该字段已实现接口(interface)。

Collections.sort(...) 中找到了类似的实现。类型声明。
public static <T extends Comparable<? super T>> void sort(List<T> list) {
...
}

最佳答案

Comparable.isAssignableFrom(field.getType())

在运行时执行此操作,但根本无法使其成为编译时错误。字段在编译时不(也不能,真的)携带它们的类型信息——它们是运行时对象,可以在运行时选择。例如,如果你有
random.nextBoolean() ? Foo.class.getField("bar") : Foo.class.getField("baz")

那么没有编译器,无论多么聪明,都可以在编译时告诉结果字段将具有什么类型。

关于java - 如何确保字段在编译时实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com