草庐IT

【JavaSE】初识泛型

全部标签

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 - 如何声明具有多个具有重要关系的泛型类型的成员?

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

java - 为什么我们可以使用具有泛型引用的数组

在此处回答相关问题时:https://stackoverflow.com/a/9872630/82609我尝试执行以下操作:Comparator[]comparators=newComparator[]{...};有效!但以下不是:Comparator[]comparators=newComparator[]{...};关于相关问题,我做了以下假设:Iguessit'sbecauseinitiallythearraycontractmaybesomethinglikethis:IfyoucreateanarrayoftypeX,youwillNEVEREVERbeabletoputan

java - 泛型和( super ?)类型标记可以帮助构建类型安全的新闻聚合器吗?

我有这个基本的News界面interfaceNews{StringgetHeader();StringgetText();}和像SportsNews这样的具体类和FinancialNews提供特定方法,如getStockPrice(),getSport()等等。新闻旨在发送给interfaceSubscriber{voidonNews(Nnews);}问题是如何注册和维护订阅。我尝试的第一种方法是使用中央Aggregator,在Class之间保留map对象和Set>,但很快这种方法就显露出行不通了。这是所需的APIpublicclassAggregator{publicvoidsubs

java - 如何理解 Java 泛型的这种用法

在我的学习书中,有这个例子:importjava.util.*;publicclassRentalGeneric{privateListrentalPool;privateintmaxNum;publicRentalGeneric(intmaxNum,ListrentalPool){this.maxNum=maxNum;this.rentalPool=rentalPool;}publicTgetRental(){returnrentalPool.get(0);}publicvoidreturnRental(TreturnedThing){rentalPool.add(returnedT

JAVA 和泛型类型问题

我遇到了泛型类型的问题:publicstaticclassField{privateClassclazz;publicField(Classclazz){this.clazz=clazz;}}publicstaticvoidmain(String[]args){//1.(warning)Iterableisarawtype.ReferencestogenerictypeIterableshouldbeparameterized.newField(List.class);//2.(error)TheconstructorMain.Field>(Class)isundefined.newF

java - 泛型集合 PECS

我对这个方法有疑问来自java.util.Collections:publicclassCollections{publicstaticvoidcopy(Listdest,Listsrc){for(inti=0;i我了解如何有效,但是,我不明白为什么第一个参数是List而不是List.我认为它在这种情况下没用。使用List应该也能正常工作,不是吗?如果可能的话,你能给我一些例子来理解它吗?谢谢。 最佳答案 不,这是有道理的。例如,考虑这种情况:T是InputStreamdest是Listsrc是List那绝对没问题。当然,您可以制作

java - 在 Java 中将泛型类型与枚举相关联

我正在为用户偏好创建一个商店,用户可以为固定数量的偏好设置值。首选项(设置)的名称存储为枚举:publicenumUserSettingName{FOO,BAR,ETC}我希望能够做的是存储一个带有名称的值类型,以便服务将使用正确的Java类型存储用户的值。例如,FOO可能是Long,而BAR可能是String。到目前为止,我们将所有值存储为String,然后手动将这些值转换为适当的Java类型。这导致到处都是try/catchblock,而在服务中只有一个try/catch更有意义。我知道枚举不能有通用类型,所以我一直在玩:publicenumUserSettingName{FOO(