草庐IT

【JavaSE】初识泛型

全部标签

java - 泛型类中的这些语句有什么区别?

我仍在学习泛型并有一个问题。假设你有这个通用类:publicclassTest{publicstaticvoidmain(String[]args){Testt1=newTest();Testt2=newTest();Testt3=newTest();}}所有语句都可以编译,但我真的不知道是什么让它们不同。任何人都可以就这三个陈述给我一个简短的解释。 最佳答案 Testt1=newTest();这里您使用的是原始类型。即,不为您的通用类传递类型参数。编译器应该在这里给你一个警告Testisarawtype.Referencestog

java - 实现泛型接口(interface)时如何返回具体类型

我有一个接口(interface),它将由几个不同的类实现,每个类使用不同的类型和返回类型。返回类型可以从方法泛型类型中推断出来,但我在实现它时遇到了问题。目前的界面是这样的:publicinterfaceTransformUtilsBase{ClasstransformToNhin(Trequest,BrokerContextbrokerContext);}我希望Impl类看起来像:publicclassTransformUtilsXCPDimplementsTransformUtilsBase{bartransformToNhin(foorequest,BrokerContextb

Java泛型方法签名解释

这个泛型方法签名是什么意思publicDmap(SsourceObject,java.lang.ClassdestinationClass);我指的是.此方法返回与第二个参数中发送的类型相同的对象。我就不能写吗publicDmap(SsourceObject,java.lang.ClassdestinationClass); 最佳答案 这意味着此方法调用采用两个类型参数:S和D。部分的意思是声明此方法是通用的,并采用两个类型参数,然后将其用作方法签名中实际类型的占位符。当您调用该方法时,您要么提供参数,要么从您作为参数传递的表达式的

具有泛型类型的 Java 8 方法引用

我在使用Java8方法引用和泛型类型时遇到问题。我已经简化了我的问题,以明确问题所在。以下代码失败:publicstaticvoidmain(String[]args){newMapper(TestEvent::setId);}privatestaticclassMapper{privateBiConsumersetter;privateMapper(BiConsumersetter){this.setter=setter;}}privatestaticclassTestEvent{publicvoidsetId(Longid){}}但是如果我将构造函数调用更改为BiConsumerc

java - 泛型函数是如何在java中实现的?

根据我的理解,java中的以下通用函数:publicstaticTf(Tx){Integer[]arr=newInteger[4];Tret=(T)arr[2];returnret;}被编译为以下形式(因为它是无界的):publicstaticObjectf(Objectx){Integer[]arr=newInteger[4];Objectret=(Object)arr[2];returnret;}但是,当我运行以下语句时,编译器能够计算出返回值是Integer类型。编译器是如何计算出来的?Integeri=f(newInteger(4));函数不是应该写成下面这样才能使上面的语句生

JavaPoet 添加泛型参数

如何生成具有以下签名的方法?publicvoiddoSomething(Tt)到目前为止我有:MethodSpec.methodBuilder("doSomething").addModifiers(Modifier.PUBLIC).addTypeVariable(TypeVariableName.get("T",MyClass.class)).build()编辑这是上面代码生成的(我不知道如何添加参数):publicvoiddoSomething() 最佳答案 将您生成的TypeVariableName提取到一个变量中,以便您可以

java - 如何在运行时根据泛型类型定义和运行时类型参数构建 Java 类型对象?

假设一个泛型类型声明(Java)classFoo{publicTbar;}我如何在运行时实例化一个Type对象,该对象表示Foo在特定类型T上参数化(也仅在运行时才知道)? 最佳答案 我想我明白你的问题了。你想序列化一个Foo,你有T的类对象在运行时(但在编译时不固定)。因此,建议在Gson中创建TypeToken的匿名子类的解决方案。不起作用,因为这需要在编译时对参数化类型(例如Foo)进行硬编码,如果您使用类似Foo的东西,它就不起作用.不过,让我们看看TypeToken是什么Gson站点上的方法实际上可以完成。您创建了一个匿名

Java:如何覆盖这个泛型方法?

publicListsave(Iterableentities){//...}如果我用下面的方法覆盖@OverridepublicListsave(Iterablestructures){Listresult=newArrayList();//...returnresult;}我收到以下错误:methoddoesnotoverrideorimplementamethodfromasupertypenameclash:save(Iterable)inMyTypeRepositoryImplandsave(Iterable)inSimpleJpaRepositoryhavethesamee

Java 泛型 - Class 或 Class<?扩展某些类>

我正在编写一个程序,它将使用Java反射(即Class.forName())根据用户的输入动态创建类实例。一个要求是我的程序创建的实例必须扩展我定义的一个特定类,称为SomeClass.我的问题是:为了存储此类类型,我应该使用有界泛型Class,或简单地无限泛型,Class?我发现一些Java书籍说Class是使用无界通配符泛型的良好实践之一,但我想知道这是否适用于我程序中的情况。如果您发现我的问题不够清楚或需要一些信息,请随时告诉我。 最佳答案 你应该使用Class因为这就是泛型的用途。在您调用Class.forName时,检查它

java - 在 Java 中如何使用泛型引用嵌套类型?

如何创建引用嵌套泛型类型的泛型类?我正在尝试创建一个Comparator类,它可以比较B的内部类型而不想公开这些类型是什么。在下面的示例中,我收到编译器警告,将我的T内部嵌套值原始转换为Comparable:publicclassSSCCE{//ComparemyAinstances.classAComparatorimplementsComparator{@Overridepublicintcompare(finalTo1,finalTo2){returno1.getValue().compareTo(o2.getValue());}}classAextendsB{@Override