草庐IT

Generics

全部标签

java - LambdaConversionException 与泛型 : JVM bug?

我有一些带有方法引用的代码,编译正常但在运行时失败。异常(exception)是这样的:Causedby:java.lang.invoke.LambdaConversionException:Invalidreceivertypeclassredacted.BasicEntity;notasubtypeofimplementationtypeinterfaceredacted.HasImagesEntityatjava.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractVali

java - 通用返回类型上限 - 接口(interface)与类 - 令人惊讶的有效代码

这是来自第3方库API的真实示例,但经过了简化。使用OracleJDK8u72编译考虑这两种方法:XgetCharSequence(){return(X)"hello";}XgetString(){return(X)"hello";}两者都报告“未经检查的转换”警告-我明白为什么了。令我困惑的是为什么我可以打电话Integerx=getCharSequence();它编译了吗?编译器应该知道Integer不执行CharSequence.调用Integery=getString();给出一个错误(如预期的那样)incompatibletypes:inferencevariableXhas

Java:如何强制类类型参数与泛型方法中指定的泛型类型相同?

我创建了一个NotificationManager类,它让您可以为一些通用通知服务注册一个通用监听器。在NotificationManager类中,我有一个用于向服务注册监听器的通用方法:publicstaticvoidregisterNotify(Classtype,INotificationListenerlistener){@SuppressWarnings("unchecked")INotificationServiceservice=(INotificationService)NotificationServiceFactory.get(type);service.regis

java - GWT 和泛型

我们在使用RPC和Java泛型发送对象列表时遇到SerializationException错误。我正在创建这个小部件来显示错误:publicclassTest{ListDataProviderldp=newListDataProvider();publicvoidsetItems(Listlist){for(Tt:list){ldp.getList().add(t);}}publicListgetItems(){returnldp.getList();}}这是创建测试小部件并传递POJO列表的代码(其中ExporterFormKey是POJO对象)Listlist=newArrayL

Java泛型继承警告

下面例子中的foo方法给了我们一个警告,而bar没有?publicclassX{staticclassY{}staticclassZextendsY{}Yy=newY();Tfoo(){return(T)y;//warning-UncheckedcastfromX.YtoT}Zbar(){return(Z)y;//compilesfine}} 最佳答案 类型T在编译时被删除为Y,这就是泛型在Java中的工作方式。因此,当在运行时执行转换时,T的类型不可用,它只是字节码中的Y。bar()可以正常编译,因为所有类型信息都可用(转换会失败

java - 为什么 Hashtable 内部使用 Entry<?,?>?

这是Hashtable#get:@SuppressWarnings("unchecked")publicsynchronizedVget(Objectkey){Entrytab[]=table;inthash=key.hashCode();intindex=(hash&0x7FFFFFFF)%tab.length;for(Entrye=tab[index];e!=null;e=e.next){if((e.hash==hash)&&e.key.equals(key)){return(V)e.value;}}returnnull;}为什么使用Entry而不是Entry?

java - Spring 通用 REST Controller : parsing request body

我有以下Controller:@RestController@RequestMapping(value="/{entity}",produces=MediaType.APPLICATION_JSON_VALUE)publicclassCrudController{@RequestMapping(method=GET)publicIterablefindAll(@PathVariableStringentity){}@RequestMapping(value="{id}",method=GET)publicTfindOne(@PathVariableStringentity,@PathV

java - 避免在基于通用工厂的 MVP 框架中进行强制转换

我试图在MVP模式中实现一种将View和Presenter解耦的方法,以提供一个框架,它正是这样做的,但后来我感到困惑。背景我有一个连接演示者的通用类型的View界面,​​反之亦然。这些接口(interface)将由实现开发人员扩展。这个问题对具体接口(interface)不感兴趣,但它们的类定义如下所示:publicinterfacePresenter和publicinterfaceView这个想法是View和Presenter都知道相反的接口(interface)。为了使用这种结构,开发人员应该提供一个工厂,实例化他想要显示的View和处理这个View的演示者。他将它们都交给了一个

java - Eclipse - 为什么推断泛型建议用于 Java 的数组

Youcannotcreatearraysofparameterizedtypes,所以这段代码在Eclipse中ArrayList[]list=newArrayList[1];无法参数化,但Eclipse显示警告Typesafety:TheexpressionoftypeArrayList[]needsuncheckedconversiontoconformtoArrayList[]并且还显示建议InferGenericTypeArguments提交时什么都不做。InferGenericTypeArgumentsReplacesrawtypeoccurrencesofgenerict

java - 替代通用 Java 方法的非法下界?

我想做以下事情:publicclassImmutableList{publicImmutableListadd(Uelement){...}}也就是说,给定一个不可变列表T,您可以添加任何U到列表以产生一个不可变列表U,约束为U必须是T的父类(superclass)型.例如我可以将一只猴子添加到猴子列表中,生成一个新的猴子列表;我可以将一个人添加到猴子列表中,从而生成一个新的原始人列表(大概是猴子和人类的最小上限);我可以在原始人列表中添加一block石头,生成一个新列表Object(假设岩石和原始人没有其他共同祖先)。这在理论上听起来不错,但下界是U根据JLS是不合法的。我可以改写: