草庐IT

Generics

全部标签

Java 警告 : Varargs method could cause heap pollution from non-reifiable varargs parameter

我在JDK1.8上使用IntelliJIDEA和javac。我有以下代码:classTest{@SafeVarargsfinalvoidvarargsMethod(Collection...varargs){arrayMethod(varargs);}voidarrayMethod(Collection[]args){}}IntelliJIDEA不会高亮上述代码中的任何内容作为警告。但是,在编译时,“消息”View的“制作”选项卡中会出现以下行:Warning:(L,C)java:Varargsmethodcouldcauseheappollutionfromnon-reifiable

java - 如何在 Java 中实例化通用递归类

我的问题是我使用的不是我开发的类(我从MicrosoftAzureSDKforJava获取它)。该类称为Node,您可以看到它here.如您所见,该类是一个递归声明的泛型类,如下所示:publicclassNode>{...}当我尝试实例化它时,我不知道该怎么做。我正在这样做,但我知道这不是办法,因为它没有尽头:Node>>>myNode=newNode>>>;希望您能理解我的问题。谢谢。 最佳答案 一种方法是像这样扩展Node:classMyNodeextendsNode>{}然后像这样实例化它:Node>node1=newMyN

Java 将特定类的列表添加到 java.lang.Object 的列表与 java 8 流一起工作 - 为什么?

publicclassTest{staticListlistA=newArrayList();publicstaticvoidmain(finalString[]args){finalListlistB=newArrayList();listB.add(newTestClass());//notworkingsetListA(listB);//workingsetListA(listB.stream().collect(Collectors.toList()));System.out.println();}privatestaticvoidsetListA(finalListlist)

java - Java扩展ArrayList时如何添加map和filter?

我正在尝试创建一个扩展ArrayList的table类。在其中,我希望能够创建一个map方法,该方法采用lambda表达式并返回一个包含映射值的新table。我还想用filter来做到这一点。我经常使用map和过滤器,我不喜欢一遍又一遍地输入整个内容。publicabstractclassTableextendsArrayList{//alotofotherstuff.publicTablemap(/*WHATDOIPUTHERE?*/mapper){returnthis.stream().map(mapper).collect(/*WHATDOIPUTHERE?*/);}public

java - List<Object> 变量赋值与其他通用列表兼容,例如 Java 中的 List<String>

最近几天我一直在努力了解Java泛型。据我了解,Java泛型不是协变的,所以List赋值与其他泛型不兼容List但是在下面的程序中,nameAndPhone.collect()方法返回List类型的列表当我替换引用变量时ListnpList与ListnpList该程序仍然可以在没有警告的情况下编译。我尝试使用类似的方法返回List同样,并使用List引用变量没有导致任何错误。为什么是List与List兼容的分配在这里?importjava.util.*;importjava.util.stream.*;classNamePhoneEmail{Stringname;Stringphone

java - 在 Java 中扩展泛型的限制,有什么办法可以解决它?

我有以下模型可以在我的应用程序中制作Controller。显然,完整的模型更加复杂,但我将重点关注导致我出现问题的唯一部分:publicabstractAbstractController{abstractprotectedClassgetType();}publicParentControllerextendsAbstractController{@OverrideprotectedClassgetType(){returnParent.class;}}现在我想扩展Parent对象并为儿子创建一个Controller,它看起来像这样:publicSonControllerextend

Java:在覆盖方法时替换参数的子类/子类型?

所以我之前问过这个问题,但大多数人发现我的代码有错误,而不是问题本身。无论如何,我正在尝试重写类中的接口(interface)方法。但是,我希望覆盖方法中的参数类型是覆盖方法中定义的参数类型的子类。界面是:publicinterfaceObserver{publicvoidupdate(ComponentUpdateEventupdateEvent)throwsException;}虽然重写这个方法的类是:publicclassConsoleDrawerextendsDrawer{//...@Overridepublicvoidupdate(ConsoleUpdateEventupda

java - 泛型和 java.beans.Introspector

给定以下代码框架,是否可以确定属性foo实际上是String类型?publicclassTestIntrospection{publicstaticclassSuperBean{privateTfoo;publicTgetFoo(){returnfoo;}publicvoidsetFoo(Tfoo){this.foo=foo;}}publicstaticclassSubBeanextendsSuperBean{}publicstaticvoidmain(String[]args)throwsIntrospectionException{BeanInfobeanInfo=Introspe

java - 如何遍历通配符泛型?

如何遍历通配符泛型?基本上我想内联以下方法:privatevoiditerateFacts(FactManagerfactManager){for(Tfact:factManager){factManager.doSomething(fact);}}如果此代码位于所示的单独方法中,则它可以工作,因为通用方法上下文允许定义可以迭代的通配符类型(此处为T)。如果尝试内联此方法,则方法上下文将消失,并且无法再遍历通配符类型。即使在Eclipse中自动执行此操作也会失败,并显示以下(不可编译的)代码:...for(FactManagerfactManager:factManagers){...

java - JAXB 泛型 @XmlValue

目标是使用JAXB生成以下XMLstringdatabinarydata是否有允许generic的解决方法@XmlValue字段(我需要存储byte[]和String数据)?以下是我想要的:@XmlRootElementpublicclassFoo{private@XmlElementListbars;}@XmlRootElementpublicclassBar{private@XmlValueTvalue;//(*)}但是我遇到了这个异常(*)IllegalAnnotationException:@XmlAttribute/@XmlValueneedtoreferenceaJavat