草庐IT

Generics

全部标签

c# - 性能,Java 泛型

Java中的泛型是否比集合具有任何性能优势。例如,在C#中有一个性能优势,因为它有助于避免装箱/拆箱,但据我所知,在Java中,在字节码级别没有泛型的“想法”,因此在编译后它具有与相同的字节码用于Collection。那么说没有性能优势是对的吗? 最佳答案 我认为此链接非常有用。ComparingJavaandC#Generics正如您在C#中所说,性能将受益,因为泛型可帮助您避免装箱/拆箱。深入的原因是.NET泛型支持值类型,但Java泛型不适用于原始类型,这就是它无法消除装箱/拆箱开销的原因。但是您仍然可以进行编译时类型检查,并

java - 如何使用 Comparable 比较链表中的通用节点?

我正在使用链表实现排序列表。我的节点类看起来像这样publicclassNode{Eelem;Nodenext,previous;}在排序列表类中,我有add方法,我需要根据通用对象的compareTo()方法的实现来比较通用对象,但我得到了这个语法错误“方法compareTo(E)未为类型E定义”。我已经尝试在Node中实现compareTo方法,但是我无法调用任何对象的方法,因为E是泛型类型。这是add(Eelem)方法的未完成主体。publicvoidadd(Eelem){Nodetemp=newNode();temp.elem=elem;if(isEmpty()){temp.n

具有多个参数的 Java 泛型

我在网站上看到了处理具有多个参数的泛型的示例,但没有一个适合我的情况。事情是这样的:我正在尝试学习Java泛型,并决定创建一个简单的二进制数组搜索实用程序函数。我正在使用自定义对象和整数对其进行测试。为了获得有关错误和警告的反馈,我使用的是Eclipse。这是我所拥有的:publicstaticintbinarySearch(Comparable[]array,Comparableitem,intstart,intend){if(end0){returnbinarySearch(array,item,mid+1,end);}elseif(item.compareTo(array[mid

java - 对接口(interface)重写方法的反射(reflection)

我有以下代码,一个通用的ITest接口(interface)由一个非通用的ITestDouble接口(interface)扩展。op方法被ITestDouble覆盖。当我尝试列出ITestDouble的所有方法时,我得到了两次op。如何验证它们实际上是相同的方法?publicclassTest{publicstaticvoidmain(String[]args)throwsNoSuchMethodException{for(Methodm:ITestDouble.class.getMethods()){System.out.println(m.getDeclaringClass()+"

java - 找不到符号 - T 类

我有这个功能;publicstaticT[]addToArray(Titem,T...items){T[]array;intarray_size=1;if(items!=null){array_size=items.length+1;}array=java.util.Arrays.copyOf(items,array_size);array[array_size-1]=item;returnarray;}我收到此错误cannotfindsymbolsymbol:classT。这个想法是使这个方法通用。我从未使用过泛型,所以我猜我错过了一些引用资料? 最佳答案

java - Consumer<T> 映射到 HashMap 中的 Class<T>

我想创建一个IdentityHashMap,Consumer>.基本上,我想用一个方法映射一个类型,说明如何处理这个类型。我想动态地能够用对象X说,执行Y。我能做到privateIdentityHashMap,Consumer>interceptor=newIdentityHashMap();但这很糟糕,因为我必须在使用它时将对象转换到lamba中。例子:interceptor.put(Train.class,train->{System.out.println(((Train)train).getSpeed());});我想做的是privateIdentityHashMap,Cons

java - 泛型编程是多态性的一个例子吗?

我正在做一项家庭作业(一个项目),其中一个标准是我必须以一种能显着提高我的代码的整体质量或功能的方式使用多态性。我制作了一个如下所示的哈希表:publicclassHashTable{...}其中Hashable是我创建的具有hash()函数的接口(interface)。我知道以这种方式使用泛型可以提高我的代码质量,因为现在HashTable几乎可以处理我想要的任何类型(例如,不仅仅是整数或字符串)。但我不确定它是否展示了多态性。我认为是的,因为E可以是实现Hashable的任何类型。换句话说,HashTable是一个可以处理(实际上)任何类型的类。但我不太确定-是多态性吗?或许我可以

java - 例如,将 Iterator<Object> 转换为 Set<String> 的最佳方式

类型转换Iterator到Set什么是最干净/最佳的实践方式? 最佳答案 publicSetgetBs(){Iteratoriterator=myFunc.iterator();Setresult=newHashSet();while(iterator.hasNext()){result.add((B)iterator.next();}returnresult;}当然,如果迭代器返回的所有A都不是B,它当然会失败。如果要过滤迭代器,那么使用instanceof:publicSetgetBs(){Iteratoriterator=my

java - 为什么泛型类型具有相同的签名?

我有以下通用类:classOr{Or(Aa){}Or(Bb){}}为什么我尝试编译它时会出现以下错误:Or(A)isalreadydefinedinOrOr(Bb)^在我看来,这两个构造函数共享相同的签名,尽管它们具有不同的泛型类型参数。为什么?以及如何解决这个问题?更新我现在明白了这个问题。编译器需要一种方法来区分这两种类型。添加这样的约束对于我的用例来说是可以的。所以我想补充一个问题:如何指定A和B这两个类型可以是不同的? 最佳答案 Itseemstomethatthetwoconstructorssharethesamesig

来自模板化对象的 Java 8 功能构造函数

我正在使用EclipseLuna服务版本2(4.4.2),Java8u51。我正在尝试创建一个方法,该方法将根据另一个方法参数创建传递对象的实例。原型(prototype)简化为publicTtest(Objectparam,Tinstance){Constructorconstructor=instance.getClass().getConstructors()[0];//Iactuallychooseaproperconstructor//eclipsereports"UnhandledexceptiontypeInvocationTargetException"Function