草庐IT

Generics

全部标签

Java泛型错误

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Javahowto:GenericArraycreationError:GenericArrayCreation我收到这个错误:CannotcreateagenericarrayofT这是我的代码(第6行错误):1publicclassHashTable{23privateT[]array;45HashTable(intinitSize){6this.array=newT[initSize];7}8}我想知道为什么会出现此错误以及修复它的最佳解决方案。谢谢。更新:我调整了我的代码,以便数组改为接收链表,但我收

java - 了解Java中泛型的使用

我试图了解类泛型的工作原理,这对我来说毫无意义。因此,例如,如果我有以下类(class):classA{voidgo(Ee){}}classBextendsA{}然后我尝试Aa1=newA();Aa2=newA();a1.go(newA());//igetacompilererrora2.go(newB());//igetacompilererrorgo方法不应该接受A或A的任何子类吗?谢谢:) 最佳答案 这样做的原因是基于Java如何实现泛型的。数组示例使用数组可以做到这一点(数组是协变的,正如其他人解释的那样)Integer[]

java - Java 中泛型的方法重载和参数

我有以下两种方法:publicstaticdoublecalculateMeanInt(Listnumbers){doublesum=0.0;for(Integernumber:numbers)sum+=number;returnsum/numbers.size();}publicstaticdoublecalculateMeanDouble(Listnumbers){doublesum=0.0;for(Doublenumber:numbers)sum+=number;returnsum/numbers.size();}您是否有一个优雅的解决方案(除了使用类型转换和对象)可以避免上面的

java - 类型参数 T 使用 Eclipse 在 <T> T[] toArray(T[] a) 中隐藏类型 T

在Java7中使用eclipse4.2并尝试实现List接口(interface)的以下方法时,我收到了警告。publicT[]toArray(T[]a){returna;}警告说:ThetypeparameterTishidingthetypeT为什么?我怎样才能摆脱它? 最佳答案 List接口(interface)也是通用的。确保您没有将T也用于类中的泛型类型。请注意,在http://docs.oracle.com/javase/6/docs/api/java/util/List.html,他们使用“E”作为类通用参数,使用“T

java - 在泛型方法参数中键入 T 参数

假设定义了以下类:classShape{}classCircleextendsShape{}classRectangleextendsShape{}//1您可以编写一个通用方法来绘制不同的形状:publicstaticvoiddraw(Tshape){}//2Java编译器将T替换为Shape:publicstaticvoiddraw(Shapeshape){}//3我的问题是,如果我们在类中直接定义//3那么我们仍然能够传递Shape,Circle和Rectangle引用//3处的方法。那为什么我们需要写//2泛型方法带类型参数这最终将与//3相同?您可以使用相同示例引用此链接:ht

java - 通过将新类型指定为泛型的实际类型来扩展泛型有什么好处

我在某处看到了这个模式:classAextendsB{}通过将新类型指定为泛型的实际类型来扩展泛型,这种结构有点不寻常。有什么用?这个图案有名字吗?有没有替代模式?示例:https://code.google.com/p/selenium/wiki/LoadableComponent跳转到:publicclassEditIssueextendsLoadableComponent{编辑:阅读回复后,我似乎需要改变对编译器类型检查的理解。在我的脑海里,我对这种模式的不满是,如果两个A需要相同,那么有没有办法不重复它们?但似乎没有更好的方法将派生类的类型传播给父类。

Java,泛型不起作用

在我看来它应该有效,但它没有。为什么?源代码:packagejavaapplication1;importjava.util.*;classA{publicstaticMapmap(){returnnewHashMap();}}classPerson{}classDog{}publicclassJavaApplication1{staticvoidf(Map>peopleDogList){}publicstaticvoidmain(String[]args){f(A.>map());}}非常简单的代码。编译器错误:类JavaApplication1中的方法f不能应用于给定类型;必填:M

java - 如何执行检查类型转换?

我是泛型的新手,遇到了问题。考虑以下代码:publicclassA{}publicclassBextendsA{}publicTgetB(){Atest=newB();Classclazz=B.class;if(clazz.isInstance(test)){return(T)test;}returnnull;}这会生成一个未检查的转换警告。在return(T)test;行。但显然我正在使用if(clazz.isInstance(test))行检查类型。有没有办法进行“检查转换”?我不希望只是抑制警告,而是实际实现检查转换。遗憾的是,我找不到有关如何执行检查转换的信息。

java - 您可以将 int 数组传递给 java 中的泛型方法吗?

我正在研究一些代码套路,同时试图更好地理解Java泛型。我有这个小方法可以像我喜欢的那样打印数组,我有几个辅助方法接受一个“事物”数组和一个索引,并返回索引上方或下方的“事物”数组(这是一个二进制搜索算法)。两个问题,#1我可以避免在splitBottom和splitTop中转换为T吗?它感觉不对,或者我正在以错误的方式解决这个问题(不要告诉我使用python或其他东西..;))#2我必须编写单独的方法来处理原始数组还是有更好的解决方案?publicclassUtil{publicstaticvoidprint(T[]array){System.out.print("{");for(i

java - 通用限制 hell : Bound Mismatch

我正在从事一个项目,该项目具有广泛的通用继承和依赖关系树。转到编辑以查看更好的示例。基础看起来像这样:classA{...}classB{...}classCextendsB{...}classDextendsA{...}classStringMap{HashMap_elements;...}所以现在我要编写一个包含特定StringMap的类类型。classX{StringMap>_thing=newStringMap>;...}目前一切正常。D实际上是一个很长的名称,并且特定组合将在代码的其他部分中非常频繁地出现,所以我决定为特定组合创建一个类,这样它会更清晰并且名称更短。class