草庐IT

Generics

全部标签

java - 将泛型与实现相同接口(interface)的枚举类集合一起使用

我正在尝试做reverselookup在几个实现相同Field的枚举类上通过遍历Class的列表来实现界面es使用Guava的Maps.uniqueIndex:FieldvalueOfSearchName=null;for(finalClass>clazz:ImmutableList.of(EntityField.class,AddressField.class,PersonFunctionType.class)){valueOfSearchName=Fields.valueOfSearchName(clazz,term.field());//errorif(valueOfSearch

java - 类在通用接口(interface)中实现自身是一种好习惯吗?

抱歉问题标题,我无法轻易用语言表达。我刚刚在一些代码中遇到过这个:publicclassMyClassimplementsMessage{...}我明白它的作用,但我以前从未见过以这种方式声明的类。我看到的缺点是现在MyClass是一个Message并且需要包含与其主要目的无关的实现方法。我看到的一个优势(除了它减少了我本来需要编写的其他类的数量)是对于像Comparable这样的东西,MyClass会知道如何将自身与其他实例进行比较,这反过来会使代码更简洁。这是好的做法吗?有什么经验法则吗? 最佳答案 这或多或少是在Java中拥有

java - 无法将泛型转换为扩展的嵌套类型

最近我在重构一个通用方法时遇到了无法解释的通用转换问题。最后我意识到我可以完全不使用T类型(我自己将其内联),但我仍然很好奇转换失败的原因。我创建了这个最小示例来说明这个问题。有人能解释一下为什么转换失败而解决方法有效吗?public>voidcastLists(Listlist,KkForBinging){Map>map=mapSizeToList(list);//Typemismatch:cannotconvertfromMap>toMap>>//Map>>expandedMap=map;//Addedafteracceptinganswer,legalassignment:Map

java - 原始类型和数据完整性列表

在这个例子中publicstaticvoidmain(String[]args){Listintegers=newArrayList();integers.add(1);addToList(integers);System.out.println(integers);}publicstaticvoidaddToList(Listlist0){list0.add("blabl");}编译并打印结果[1,blabl]我的理解是:引用变量“整数”有一个数组列表对象的地址(比如111),它被传递给addToList方法。因此,在addToList方法中,list0指向具有对象(它是Intege

java - 为什么这里不允许转换为 "GenericType<?>"?

此代码会导致javac出现编译错误(但值得注意的是,不会出现Eclipse4.2.2!):publicinterfaceFoo{}classBarimplementsFoo>{}classTest{voidtest(Foo>foo){Barbar=(Bar)foo;}}javac的错误是这样的:Foo.java:9:error:inconvertibletypesBarbar=(Bar)foo;^required:Barfound:FoowhereCAP#1isafreshtype-variable:CAP#1extendsIterablefromcaptureof?extendsIt

java - boolean containsAll(Collection<?> c) vs boolean addAll(Collection<? extends E> c); 的设计决策在集合框架中

这个问题在这里已经有了答案:GenericCollection(10个答案)关闭9年前。为什么booleancontainsAll(Collectionc);每种类型都允许集合框架的方法?。但是booleanaddAll(Collectionc);允许?extendsE。所以,我写了一个程序来澄清。这是我的程序publicclassContainAllTest{//takeServiceDtoArrayListresultList=newArrayList();voidTest(){ServiceDtoserviceDto=newServiceDto();serviceDto.setN

java - 当参数接受 Collection<X<?>> 时无法输入

这个问题来自javax.validation.ConstraintViolationException的构造函数的类型.它接受Set>作为参数。虽然很容易获得一组ConstraintViolation,其中X是具体类型,但似乎不可能从任何类型良好的API获得一组“ConstraintViolation”。如果不使用一些复杂的转换,就不可能将前者转换为后者。(转换为Set>,然后转换为Set>。)那么你们认为API错误还是我错了(为什么)? 最佳答案 API错误。除非实现需要添加新的ConstraintViolations到集合,它应

java - 通用子类型和通配符在 Collections.copy 中如何工作?

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭9年前。Improvethisquestion这是集合复制方法(部分):publicstaticvoidcopy(Listdst,Listsrc){for(inti=0;i有4个示例调用:Listobjs=Arrays.asList(2,3.14,"four");Listints=Arrays.asList(5,6);1.Collections.copy(objs,ints);2.Collections.copy(objs,ints);3.C

Java 通用构造函数的语法和用途

Java构造函数可以是通用的:http://docs.oracle.com/javase/tutorial/java/generics/methods.html但是我找不到一个很好的例子来说明如何声明和调用通用构造函数。此外,我不理解泛型构造函数的用途,因为类型参数的范围仅限于构造函数。具有通用构造函数的类:publicclassMyClass{publicMyClass(Tdata){//...}}我们将其调用为:MyClassobj=newMyClass(12);所以我的问题是:通用构造函数的用途是什么?你能展示一个来自JDK的例子或你自己的例子吗?为什么这样声明Integerva

java - 重写泛型类的方法时发生名称冲突

我试图通过以下代码了解名称冲突错误:importjava.util.*;importjavax.swing.*;classFoo{publicvoiddoSomething(Numbern,Mapcomps){}}classBarextendsFoo{publicvoiddoSomething(Numbern,Mapcomps){}}错误信息:error:nameclash:doSomething(Number,Map)inBaranddoSomething(Number,Map)inFoohavethesameerasure,yetneitheroverridestheother我知