Java Generics – 可比较的界面
发布时间:2020-12-15 04:41:32 所属栏目:Java 来源:网络整理
导读:在下面的代码中,Comparable接口用于确保x和y应该具有相同的引用类型,但是当V扩展为T时,V应该与T的类型或T的子类相同,那么使用Comparable接口的重点是什么. 此外,如果我不使用Comparable接口,那么最后一次调用isIf方法正在进行编译,尽管x和y的类型不同. 任何
在下面的代码中,Comparable接口用于确保x和y应该具有相同的引用类型,但是当V扩展为T时,V应该与T的类型或T的子类相同,那么使用Comparable接口的重点是什么.
此外,如果我不使用Comparable接口,那么最后一次调用isIf方法正在进行编译,尽管x和y的类型不同. 任何人都可以解释使用这个程序的Comparable接口吗? public class Generics_13 { static <T extends Comparable<T>,V extends T> boolean isIn(T x,V[] y) { for(int i = 0;i < y.length;i++) if(x.equals(y[i])) return true; return false; } public static void main(String[] args) { Integer nums[] = {10,20,30}; if(isIn(10,nums)) System.out.println("10 belongs to the array"); if(!isIn(60,nums)) System.out.println("70 doesnt belong to the array"); String arr[] = {"Neeraj","Parth","Ritum"}; if(!isIn("abc",arr)) System.out.println("abc doesnt belongs to the array"); /*if(isIn("String",nums)) // illegal System.out.println("This wont compile"); */ } } 解决方法
当前使用泛型并不是真的有意义,因为没有使用过Comparable的方法,这意味着您可以简单地删除extends声明.
此外,类型V也没有使用,因为你可以简单地用T代替它而不破坏你的逻辑.所以最终结果如下: public class Generics_13 { static <T> boolean isIn(T x,T[] y) { for(int i = 0;i < y.length;i++) if(x.equals(y[i])) return true; return false; } // main() etc follow here } 但是现在我们在java-8中有了Stream API,你可以使用下面的代码片段来实现同样的目的: static <T> boolean isIn(T x,T[] y) { return Arrays.stream(y).anyMatch(i -> i.equals(x)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Java – 通过Class中的方法更改数组的值
- 错误“由以下引起:java.lang.ClassNotFoundException:”
- java – Robotium:如何在继续之前等待加载完成?
- java – 为什么thenCallRealMethod()在这里丢失了参数?
- java – 如何使JNDI名称与GlassFish和WildFly兼容
- JAVA遍历map的几种实现方法代码
- 获取Java webapp中的所有用户和角色
- 在Java代码中使用eclipselink从MATLAB运行
- Java微信公众平台开发(3) 接收消息的分类及实体的创建
- Spring boot + LayIM + t-io 实现文件上传、 监听用户状态的