草庐IT

Generics

全部标签

java - 通过 getter 和 setter 更新 pojo 的通用方法

假设我有一个带有不同类型的getter和setter的POJO。我想编写一些通用算法,用于基于仅通过lambda定义getter和setter将数据从一个更新到另一个。我正在尝试以这种方式创建它privatestaticfinalMap,BiConsumer>ACCESSORS=newHashMap,BiConsumer>(){{put(Entity::getAreaCode,Entity::setAreaCode);}});然后我遍历所有将目标实体应用于它们的条目,如果getter的结果不为空,那么我想为其他实体应用相应的setter。但它不会工作,因为Object不能转换为Stri

java - java.util.Map 条目集的问题

我在使用以下代码时遇到了一个奇怪的问题。Mapmap=newHashMap();for(Entryentry:map.entrySet()){//}而下面的代码无法编译。Mapmap=newHashMap();for(Entryentry:map.entrySet()){//compileerrorhere//}有什么线索吗? 最佳答案 entrySet方法签名是Set>entrySet()所以只能引用Map.Entry如果您像在第一个示例中那样在声明中声明了泛型类型。在第二个中,您使用的是原始类型,所以它本质上是SetentryS

java - 为什么 Java 的 TreeSet<E> remove(Object) 不带 E

来自Java6TreeSet文档:booleanremove(Objecto):Removesthespecifiedelementfromthissetifitispresent.为什么它接受一个对象而不是泛型类型E?唯一可以添加的对象是E类型,因此唯一可移动的类型应该是E类型。 最佳答案 从发布的第一条评论中获取答案:神话:Apopularmythisthatitisstupidandevil,butitwasnecessarybecauseofbackwardcompatibility.Butthecompatibilitya

java - 具有多个边界的类型参数

此代码编译:importjava.io.Serializable;importjava.util.Arrays;classTest{}但是如果我将最后一行替换为classTest{}我得到“此处预期的接口(interface)”。为什么? 最佳答案 来自section4.4oftheJLS:Everytypevariabledeclaredasatypeparameterhasabound.Ifnoboundisdeclaredforatypevariable,Objectisassumed.Ifaboundisdeclared,i

java - 通用数组创建

这是我正在使用的代码publicclassaClass{privateT[]elements;publicaClass(T[]elements){this.elements=elements;}publicvoiddoSomething(){T[]newArray=(T[])newObject[5];...}}我见过有人说创建这样的数组是个坏主意,因为它不是类型安全的。但是,每次我使用它时,我都没有遇到任何问题。什么时候创建这样的数组会导致问题?谢谢 最佳答案 这是一个导致问题的例子:publicclassMain{publicst

java - Eclipse 中通用类型的自动完成

“通过接口(interface)引用对象”是一种很好的做法,如EffectiveJava中所述。所以例如我更喜欢Listal=newArrayList();结束ArrayListal=newArrayList();在我的代码中。一件烦人的事情是,如果我输入ArrayListal=new然后在Eclipse中按Ctrl+Space我得到ArrayList()作为提案。但是,如果我键入Listal=new然后按Ctrl+Space,我将只获得定义匿名内部类的提案,而不是诸如newArrayList()之类的提案。,什么是99%的情况,或者例如新的Vector().问题:有什么方法可以让子类

java - 如何在运行时在 java 中设置 ArrayList 的泛型类型?

好的,所以我正在设置我自己的XML序列化(我知道还有其他的,甚至有一些内置在Java中,但我自己这样做是为了学习,因为它非常好用)。我有序列化。我目前正在进行反序列化(读取XML文件并根据文件中的数据组装对象)并且我遇到了设置泛型类型的问题。经过大量研究,我想出了如何获取类的泛型类型,以便在序列化时编写它们,但我不知道该怎么做:Classc=Class.forName(string);ArrayListlist=newArrayList();我已经在C#中看到了一些答案,但显然C#比Java更通用,我无法在Java中复制解决方案。这甚至可以通过反射(reflection)来完成吗?

java - 使用 JAXB 解码通用列表

我有一个返回此XML的服务:successid1owner1id2owner2或successid1name1id2name2我想使用这些类解码检索到的XML:结果:@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)publicclassResponse{@XmlElementprotectedStringstatus;@XmlElementWrapper(name="result")@XmlElementprotectedListresult;}项目:@XmlRootElement@XmlAccessorType(XmlAcces

java - 继承不适用于作为泛型类型传递

考虑我的自定义扩展HashMap:publicclassCustomHashMapextendsHashMap{...}为什么这行不通,因为CustomHashMap是HashMap的子项?Map>customs=newLinkedHashMap();但这行得通:Map>customs=newLinkedHashMap();并且在将CustomHashMap添加(放入)到customsMap中时它也有效。customs.put("test",newCustomHashMap());在初始化时不指定泛型似乎很奇怪,但在其他情况下则不然。 最佳答案

java - 通用列表打印方法

我正在尝试编写一个适用于所有实现“可迭代”接口(interface)的类的通用打印方法publicclassList{publicstatic>voidprint(T[]list){for(Objectelement:list){System.out.println(element);}}publicstaticvoidmain(String[]args){ArrayListl=newArrayList();l.add(1);l.add(5);l.add(3);l.add(2);print(l);}}但我收到错误消息“类型列表中的方法print(T[])不适用于参数(ArrayList