草庐IT

Generics

全部标签

java - 这个java泛型方法语法有什么问题

我有以下类(class)键值.javapackagetest;publicclassKeyValue{privateStringkey;privateTvalue;publicStringgetKey(){returnkey;}publicvoidsetKey(Stringkey){this.key=key;}publicTgetValue(){returnvalue;}publicvoidsetValue(Tvalue){this.value=value;}}阅读器.javapackagetest;publicinterfaceReader{Sread(Classclazz);}测试

java - 真正的 Java 泛型(模板)

查看JavaVMspecification后,我注意到不仅仅是ASCII字母可以用来创建标识符。首先,我想知道是否有任何额外的符号(除了$,可用于标识符)您认为使用扩展字符集来编码标识符中的附加信息和自定义类加载器是否有可能实现真正的Java泛型?当然,您必须绕过类型删除,但使用自定义解析器可以实现吗?因此您可以将通用名称存储为以下格式:$g$GenericList$_Java_lang_String$我正在使用GenericList在这里,因为我不打算修改原来的实现!用类加载器加载它们,创建一个合适的GenericList版本并将其发回。编辑:我计划将其用于我在JVM上构建的语言。因

java - 具有反向关系的通用接口(interface)

我想创建两个具有反向关系的接口(interface)。publicinterfaceItem>>{publicCgetCategory();publicvoidsetCategory(Ccategory);}我不确定表达式CextendsCategory>是否正确是正确的,但至少没有编译错误。publicinterfaceCategory{publicListgetItems();publicvoidsetItems(Listitems);}IextendsItem发出警告Itemisarawtype.ReferencestoItemshouldbeparametrized.我试过了I

具有通用静态工厂的 Java 泛型益智游戏

我最近开始为一个项目编写通用对象映射器,但遇到了一些我不太了解的问题。鉴于以下情况:publicclassG{publicG(Classc){}publicvoidm(Xx){}publicstaticGcreate(Classc){returnnewG(c);}publicstaticvoidmain(String[]args){Objecto="";//irrelevant!Gt=create(o.getClass());t.m(o);}}我得到以下编译错误:m(capture#402of?)inGcannotbeappliedto(java.lang.Object)我似乎无法找到

具有下限类型的 Java 类型推断

为什么Java可以推断出多个上界类型的共同祖先,但不能推断出下界类型的共同祖先?更具体地说,请考虑以下示例:staticclassTest{staticTpick(Tone,Ttwo){returntwo;}staticvoidtestUpperBound(){ListextendsInteger=newArrayList();//LististreatedasasubclassofListListextendsNumber=extendsInteger;//ListisinferredasthecommonsuperclassextendsNumber=pick(extendsInt

java - 相互依赖/循环泛型循环

问题:我有两个接口(interface)(这里是GenCarry和Gen):publicinterfaceGenCarry{GenCarrysetGen(Tgen);}publicinterfaceGen{voidapplyOn(Tcarry);}当我忽略“原始类型”警告时它会起作用,但尝试完成它们我不会做得太过分:GenCarry>>Gen>>->error:notavalidsubstitutefortheboundedparameter.问题:如果完整的话,这样的界面会是什么样子——或者甚至可能吗?是否有更好的方法来“概括”这样的界面? 最佳答案

java - 了解静态嵌套类类型定义中的原始通配符与无限通配符

我一直在用一些奇怪的代码做一些代码考古学,我遇到了类似的东西:publicabstractclassOuter{protectedOuter(Innerinner){//...}publicstaticabstractclassInner{//...}}令我震惊的是Inner上没有无限通配符类型Outer的用法类型(位)。使用Inner>的含义是什么?与Inner?我可以使用这两种类型的版本成功地编译和运行测试,但我对幕后发生的事情感到困惑。 最佳答案 虽然叫Inner在这个例子中,它实际上不是一个内部类,而是一个静态嵌套类。内部类

Java 泛型奇怪的行为

这很难用语言来解释,但是JavaGenerics给了我意想不到的结果。我希望如果我说列表的类型是?extendsObject,我可以在那里存放任何东西。因此,如果列表类型为Wrapper,我可以在其中存储任何类型的Wrapper。等等。这对我来说很有意义。但让我们假设我们有:privatestaticclassWrapper{publicWrapper(Tt){/**/}}我想要这样的东西:privatestaticfinalList>>ls1=newArrayList();请注意,这会给我一个错误:publicstaticdoit(Tt){Wrapper>l1=newWrapper(

java - 为什么要编译?类型删除

这个问题在这里已经有了答案:Whatisarawtypeandwhyshouldn'tweuseit?(16个答案)关闭6年前。为什么下面的编译?我收到一条警告,告诉我getTest()returnsarawtypesogetTestIntegers()iserased但我不明白为什么,getTestIntegers()不是通用的。我会期待Listtester=Test.getTest().getTestIntegers()产生编译错误publicclassScratchpad{publicstaticvoidmain(String[]args){newScratchpad().run

java - 泛型 Java 类型的类不能分配给其类类型上限为泛型父类(super class)型的变量

我使用Java8。在我的设计中有一些简单的类,它们对值参数进行建模,例如FloatParameter。或EnumParameter.A具有这些类的通用父类(superclass)(GenericParameter),它实现了参数名称及其默认值。子类实现其他特定于它们的属性,例如FloatParameter的范围。.此外,我想处理参数的类型,而不考虑它们的具体类型。但我仍然想以它们是GenericParameter的子类型的方式来绑定(bind)类型.为此,我创建了一个方法,例如process(Class>paramType).现在,问题是EnumParameter.class不能分配给