草庐IT

Generics

全部标签

java - 如果外部类被泛化,则不能从静态上下文中引用“Main.this”

为什么下面的代码没问题,但是一将T作为泛型添加到Main中,就抛出如下错误?'Main.this'cannotbereferencedfromastaticcontext//publicclassMain{-uncommentthisfortheerrortoappearpublicclassMain{publicstaticvoidmain(String[]args){newMain();}classTestNonStatic{}privatestaticclassTestStatic{publicTestStatic(TestNonStaticnonStatic){//thisis

java - 用一种类型参数化的方法接受两种类型

可能我遗漏了一些东西,也许我的假设是错误的,但我认为当我声明类型为T的参数化方法时,无论该类型有多少变量,它仍然是相同的类型。但我看到这个编译并且它反对我的观点。staticvoidf(Ta,Tb){}publicstaticvoidmain(String[]args){f(Integer.MIN_VALUE,"...");}因此,如果我的方法使用一种类型进行参数化,并且我在两个参数中使用该一种类型,为什么它允许我发送具有两种完全不同类型的两个对象?我猜这归结为将T视为Object? 最佳答案 尽管Integer和String是两种

java - Checkstyle Java 泛型 : '?' is not preceded with whitespace

我正在使用插件maven-checkstyle-plugin2.17它有6.11.2checkstyle版本。关于空格的配置是:我总是得到这个错误:(whitespace)WhitespaceAround:WhitespaceAround:'?'isnotprecededwithwhitespace.(whitespace)WhitespaceAround:WhitespaceAround:'?'isnotfollowedbywhitespace.Emptyblocksmayonlyberepresentedas{}whennotpartofamulti-blockstatement(

java - 调用泛型方法时未指定类型参数

假设我们有以下泛型类:publicclassGenericClass{privateUvalue;publicGenericClass(Uvalue){this.value=value;}}以及其他一些类MyClass中的以下泛型方法:publicvoidgenericMethod(Targ){ObjectgenericClass=newGenericClass(arg);}调用BT类型参数会得到什么值genericMethod("text");?一些注意事项:上面的代码编译时没有错误或警告,这对我来说很奇怪。反编译(借助IntelliJIDEA2016)显示如下代码:publicvo

java - 如何在比较器的映射中使用泛型以避免警告

我想创建一个比较器映射如下,该映射将用于为每种类提供比较器。如何替换Generic?在我的map声明中确保我的map(比较器)的键和值始终具有相同的类类型?我也想减少警告的数量privatestaticfinalMap,Comparator>comparators=newHashMap();static{comparators.put(Identifiable.class,newComparator(){@Overridepublicintcompare(Identifiableo1,Identifiableo2){returno1.getId().compareTo(o2.getId

<T extends A<T>> 和 Inheritance 形式的 Java 泛型

我对Java泛型有一个棘手的问题,或者我可能只见树木不见森林。我有如下所示的三个类A、B和C。abstractclassA>{abstractTsefl();};abstractclassB>extendsA{};classCextendsB{@OverrideCsefl(){returnthis;}}后来我有不同版本的B,也有不同版本的C。此外,我有一个功能测试应该接受B的列表(或其表亲之一)。或者一般来说,它应该接受从A继承的任何元素列表。不幸的是,我需要知道函数主体中列表元素的类型,即最上面的类型a.self可以返回(或类型T)。功能测试如下:static>voidtest(Li

Java - 将类型传递给父类(super class)静态方法

假设我有一个简单的类:publicclassTestClass{publicStringfield1="Field1";publicStringfield2="Field2";publicStringfield3="Field3";}我的项目中有多个pojo类,我希望能够将每个对象序列化为json。所以我创建了新的Serializer类(gson用于序列化):publicclassSerializer{publicStringtoJson(){returnnewGson().toJson(this);}}我的示例类扩展了Serializer:publicclassTestClassex

java - 什么时候在 Java 中进行类型检查

我的家庭作业中有一个看起来像这样的问题。以下哪个过程仅在Java编译期间发生?(i)类型推断——推断未指定类型的变量的类型。(ii)类型删除——用Object或其绑定(bind)替换泛型的类型参数。(iii)类型检查——检查值是否与分配给它的变量的类型相匹配。一个。只有(i)B.只有(i)和(ii)C.只有(i)和(iii)D.只有(ii)和(iii)E.(i)、(ii)和(iii)据我了解,Java仅在编译时对泛型执行类型检查,因此(i)和(ii)绝对正确。但是,我不确定类型检查,从提供的描述来看,类型检查似乎并不局限于泛型,还包括其他方面。这道题的答案是B,但是没有给出解释。我想知

java - 如何声明具有多个具有重要关系的泛型类型的成员?

这是我想在我的java代码中写的内容:private,RextendsResult>MyTypemember;然而,这是无效的语法。所以我最后写:privateMyType,?extendsResult>member;但这忽略了从Result派生的两个类是相同的事实。我的类方法都强制执行这种关系,所以我可以确定MyType强制执行它,但在某些情况下我仍然必须不安全地类型转换member。更多详情这是我想要做的事情的精确版本,尽管它更加严格:我希望我能做到:private,RextendsResult>Map,ActionHandler>handlers;相反,我必须这样做:privat

java - Java foreach 循环中的 ClassCastException

以下代码在什么情况下会出现ClassCastException:importjava.util.Arrays;importjava.util.List;publicclassGenerics{staticListgetObjects(){returnArrays.asList(1,2,3);}publicstaticvoidmain(String[]args){Listlist=getObjects();for(Objecto:list){//ClassCastException?System.out.println(o);}}}我们在生产环境中有一个类似的案例(我知道这是不好的做法)