草庐IT

type-inference

全部标签

JSDOC:声明@Type在“ ... of” loop中的变量

我可以声明变量类型吗一使用JSDOC@type注解?/**@typesome.type*/for(letoneofmany){...}诸如PHPDOC注释之类的东西:/**@var\Some\Type$one*/foreach($manyas$one){}看答案是的你可以。您只需要将类型声明移动到括号内的内部,然后才能在您的变量之前:for(/**@type{SomeType}*/constoneofmany){//...}这很好,尽管我通常更喜欢指定类型many反而。例如:/**@type{Number[]}*/constmany=[1,2,3,4];然后是one将自动推断。P.S。:注意我

Java 泛型 : How does method inference work when wildcard is being used in the method parameters?

假设我有以下内容:classx{publicstaticvoidmain(String[]args){Lista=newLinkedList();Listb=newLinkedList();Listc=newLinkedList();abc(a,"Hello");//(1)Errorabc(b,"Hello");//(2)Errorabc(c,"Hello");//(3)okdef(b);//(4)ok//ShowinginferenceatworkInteger[]a={10,20,30};//(5)Tisinferredtobe?extendsObjectMethodsignatu

java - 名称冲突 : The method add(Object) of type test2 has the same erasure as add(E) of type HashSet<E> but does not override it

导入java.util.*;classAextendsHashSet{publicbooleanadd(Objectobj){//compilererrorreturntrue;}}orclassAbc{publicvoidadd(Tt){}//compilererrorpublicvoidadd(Objecti){}//compilererror(can'toverload?)}错误:名称冲突:test2类型的方法add(Object)与HashSet类型的add(E)具有相同的删除,但没有覆盖它我不知道上述错误背后的概念是什么,有人可以建议我在哪里可以研究这个概念吗?

java - 编译器不推断 System.out::println 功能接口(interface)

我有一个重载方法,它采用两个不同的功能接口(interface)作为参数(Runnble和Supplier)。System.out.println显然只兼容Runnable,因为它是一个void方法。然而编译器仍然声称调用是不明确的。这怎么可能?importjava.util.function.Supplier;publicclassGenericLambdas{publicstaticvoidmain(String[]args){wrap(System.out::println);//Compilererrorherewrap(()->{});//Noerrorwrap(System

java - Java 9 中类型推断检查的变化

代码(缩短了实际代码以解释问题)。importjava.util.Map;importjava.util.HashMap;publicclassTypeReferenceTest{publicstaticclassModel{publicvoidsetAbc(Abcabc){}}publicstaticclassAbc{publicAbc(Tval){}}publicstaticvoidmain(String[]args){MapattrMap=newHashMap();attrMap.put("key",0);Modelm=newModel();m.setAbc(newAbc(get

java - Java 规范中的方法类型推断

我目前正在编写Java编译器并已实现第15.12.2.7节。JLS7(http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.7)的一部分,规范中最烦人的部分之一。我仍然有一个问题,因为规范似乎不明确或模棱两可。我的问题是这一行:lcta(U)=?如果U的上限是Object,否则?扩展lub(U,Object)U是一个任意类型的表达式。类型表达式的上限是多少?另外,为什么lcta总是通配符?规范定义CandidateInvocation(G)=lci(Inv(G))。现在,例如,考虑Inv(G)=

java - 泛型类型推断失败?

例子A研究以下片段:publicclassExampleA{staticclassPair{}staticPairanyPair(){returnnull;}staticvoidprocess(Pairp1,Pairp2){return;}publicstaticvoidmain(String[]args){Pairp=anyPair();process(p,anyPair());//doesn'tcompile}}有人可以解释为什么类型推断适用于局部变量p的赋值,但不适用于process的第二个实际参数吗?例子B这可能更容易理解:publicclassExampleB{publics

java - Java 中的泛型方法和类型推断

给定以下不是很有用的代码:packagecom.something;importjava.util.ArrayList;importjava.util.Collection;//Notagenericclass!publicclassTest{publicvoidplain(Tparam1,Tparam2){}publicvoidfancy(Tparam1,Collectionparam2){}publicvoidtestMethod(){//Noerrorfancy("",newArrayList());//Compilererrorhere!fancy("",newArrayLis

java - Mockito 匹配器 : matching a Class type in parameter list

我正在使用Eclipse处理Java、Spring的RestTemplate和Mockito。我正在尝试模拟Spring的rest模板,我模拟的方法的最后一个参数是类类型。下面是函数的签名:publicResponseEntityexchange(URIurl,HttpMethodmethod,HttpEntityrequestEntity,ClassresponseType)throwsRestClientException我最初尝试模拟这个方法如下://givenrestTemplatereturnsexceptionwhen(restTemplate.exchange(isA(U

java - Arrays.asList() 的限制在 Thinking in Java 4th Edition 中不成立

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭6年前。Improvethisquestion在这本书中,它说:AlimitationofArrays.asList()isthatittakesabestguessabouttheresultingtypeoftheList,anddoesn'tpayattentiontowhatyouareassigningitto.这本书是BruceEckel的ThinkinginJava然而,下面的代码工作正常,与本书第280页中显示的代码相反pub