草庐IT

【JavaSE】初识泛型

全部标签

java - 为什么在泛型方法的定义中有时会省略返回类型之前的尖括号

我正在阅读有关泛型的EffectiveJava第5章,特别是关于首选泛型方法的项目。我注意到有时返回类型之前的方法声明中的类型参数(在尖括号之间)有时会被省略。像这样的例子还有很多,比如第二版第135页:publicvoidpopAll(Collectiondst){while(!isEmpty())dst.add(pop());}另一方面,我也看到过类似的带有声明的泛型方法publicvoid...第一个打错了吗?如果不是,我什么时候可以从声明中省略括号?谢谢 最佳答案 E是一个类型变量——它代表一些其他类型,比如String或I

java - 为什么以下带有循环泛型的代码无法编译?

以下是我的代码classA>{Cc;voidtest(){c.acceptParameterOfTypeA(this);}}classB{}classC>{voidacceptParameterOfTypeA(A2a){}}错误发生在c.acceptParameterOfTypeA(this);。错误是ThemethodacceptParameterOfTypeA(A2)inthetypeCisnotapplicableforthearguments(A)据我所知,acceptParameterOfTypeA方法需要一个A类型的参数,而在给出错误的行中的this是A类型的。我做错了什么

Java:声明带有多个泛型 "constraints"的变量

我在java中有一堆类,它们都实现了一个名为IdObject的接口(interface)(指定一个getId()方法)。而且,它们也都实现了Comparable,并以自身为类型参数,因此它们都与自身具有可比性。我想做的是声明一个此类对象的列表,填充它,然后对其进行排序并对它们调用getId()。所以我的代码看起来像这样:List>objectList=null;if(foo){objectList=newArrayList();...}elseif(bar){objectList=newArrayList();...}if(objectList!=null){Collections.s

java - java中泛型类型的容器

我有一个通用类Foo和参数化类型Foo和Foo.现在我想将不同的参数化类型放入一个ArrayList中.这样做的正确方法是什么?候选人1:publicclassMMM{publicstaticvoidmain(String[]args){FoofooString=newFoo();FoofooInteger=newFoo();ArrayList>list=newArrayList>();list.add(fooString);list.add(fooInteger);for(Foofoo:list){//Dosomethingonfoo.}}}classFoo{}候选人2:public

Java、静态方法绑定(bind)和泛型都包含一些方法重载

正如标题所暗示的那样,我的问题有点奇怪和复杂。我知道我将要做的事情违反了“良好”编程实践的所有规则,但是嘿,如果我们不活一点,生活会怎样?所以我所做的就是创建以下程序。(请注意,这是真正尝试和理解泛型的大型实验的一部分,因此某些函数名称可能有点乱序)importjava.util.*;publicclassGenericTestsClean{publicstaticvoidtest2(){BigCageanimalCage=newBigCage();BigCagedogCage=newBigCage();dogCage.add(newDog());animalCage.add(newC

java - 使用 Mockito.when() 和泛型类型推断的奇怪泛型边缘案例

我正在编写一个使用java.beans.PropertyDescriptor的测试用例使用Mockito,我想模拟getPropertyType()的行为返回任意Class对象(在我的例子中是String.class)。通常,我会通过调用来做到这一点://wealreadydidan"importstaticorg.mockito.Mockito.*"when(mockDescriptor.getPropertyType()).thenReturn(String.class);然而,奇怪的是,这无法编译:cannotfindsymbolmethodthenReturn(java.lan

Java 泛型通配符扩展最终类

为什么Java在编译我的TestGenericsclass时不抛出任何警告,考虑到Stringclass是final并且不能扩展?importjava.util.*;publicclassTestGenerics{publicvoidaddStrings(Listlist){//somecodehere}}} 最佳答案 假设我有这样的方法:publicListfilterOutNulls(Listinput){...诚然,这不是世界上最好的签名,但仍然完全合法。如果我通过List会发生什么那个方法?根据签名,它返回一个List.如果

Java:子类化泛型类

我有一个通用类,我希望按如下方式对其进行子类化:publicclassSomeTableextendsBaseTable{publicSomeTable(introws,intcols){super(rows,cols,SomeTableEntry.class);//Doesnotcompile://Cannotfindsymbol:constructorBaseTable(int,int,java.lang.Class)}}...通用父类(superclass)是:publicclassBaseTable{publicBaseTable(introws,intcols,Classcl

java - 泛型 - 集合中的 Java 集合

我是泛型的新手,所以不确定我哪里出错了......我有名为Cat、Dog和Rabbit的类,它们实现了Animal接口(interface)。下面的代码可以编译SetanimalSet;SetdogSet=newHashSet();animalSet=dogSet;但是下面的代码不会Map>animalMap;Map>dogMap=newHashMap>();animalMap=dogMap;//thislinewillnotcompile编译器说类型不兼容。我哪里错了?更新感谢大家的帮助我通过添加另一个通配符更改了第一行代码以下代码将编译Map>animalMap;Map>dogMa

java - 混合方法引用和泛型时出现 LambdaConversionException

下面的代码编译正常,但在运行时抛出异常。这是预期的行为吗?为什么?代码:publicstaticvoidmain(String[]args){Aa=newA();System.out.println(a.min());//printsnullasexpectedSystem.out.println(a.max());//throwsexception}staticclassA>{Streams=Stream.empty();publicTmin(){returns.min((t1,t2)->t1.compareTo(t2)).orElse(null);}publicTmax(){ret