草庐IT

Generics

全部标签

Java泛型类型转换之谜

我正在尝试使用Google的GuavaImmutableSet类来创建一组具有类似时间属性(java.util.Date和org.joda.time.DateTime)的不可变类。privatestaticfinalImmutableSet>timeLikeObjects=ImmutableSet.of(Date.class,DateTime.class);我完全不明白为什么会出现此编译器错误(Eclipse中的Java1.6)。Typemismatch:cannotconvertfromImmutableSet>>>toImmutableSet>请注意,这是可行的:privatest

java - 为什么不能将 ArrayList 分配给 List 变量?

为什么下面的代码不起作用?importjava.net.URL;importjava.util.ArrayList;importjava.util.List;List>announces;announces=newArrayList>();错误如下:Typemismatch:cannotconvertfromArrayList>to> 最佳答案 因为您的泛型绑定(bind)到一个类型List.即只有List(这是一个接口(interface))被接受。您可以使用wildcards允许任何列表.List>announces;你也可以考

c# - 我们如何使用 Java 中的泛型来使它们看起来更好 :

我有这种方法可以使用列表元素的一个属性将List转换为Map:简而言之,它看起来像这样:privateMap>>toMap(List>diagnostics){Map>>result=newHashMap>>();for(Diagnosticd:diagnostics){List>list=null;if(!result.containsKey(d.getCode())){list=newArrayList>();result.put(d.getCode(),list);}else{list=result.get(d.getCode());}assertlist!=null;list.

java - 我应该总是使用泛型吗?

我创建了一个单元测试:newCallable(){@OverridepublicObjectcall()throws.....我在Eclipse中收到警告:Callableisarawtype.ReferencestogenerictypeCallableshouldbeparameterized我应该这样写代码吗:newCallable()是否消除警告?似乎只有junit测试,添加额外的代码没有任何意义......谢谢。 最佳答案 是的,避免使用原始类型并使用泛型是一种很好的做法。使用Callable清楚地表明Callable旨在

java - 为什么允许 `T extends String`但给出警告?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:@SuppressWarningsfor“extendsString”为什么TextendsString被允许但给出警告?ThetypeparameterTshouldnotbeboundedbythefinaltypeString.FinaltypescannotbefurtherextendedpublicclassCar我知道什么是final我知道它是有效的,因为T的唯一可能值可以是String我想知道警告。

java - 'list of cherry cokes' 是 'list of cokes' 吗?

我收到“类型不匹配:无法从List转换为List>”看起来“樱桃可乐列表”不是“可乐列表”。这是违反直觉的。如果它必须是List>,我怎么能创建那个'xs'呢?我必须有一个Coke的子类?classTaste{}classCherryextendsTaste{}abstractclassCoke{}classCherryCokeextendsCoke{}classx{voiddrink(){List>xs=Arrays.asList(newCherryCoke());}} 最佳答案 你是对的-“可乐列表”不是“樱桃可乐列表”-但“延

java - 类型安全的通用 Java 观察器编译时错误

要求我正在尝试编写一对Observer/Observable类。我想对Observer进行参数化,以便可以进行类型安全的更新调用。想象一下这个版本:classViewimplementsObserver{@Overridepublicvoidupdate(Modelmodel){render(model);}//nocasting:)}而不是这个需要转换的版本:classViewimplementsObserver{@Overridepublicvoidupdate(Objectmodel){render((Model)model);}//casting:(}尝试这是我目前所拥有的。我

java - <T extends A> void foo(T t) 和 void foo(A a) 的区别

假设A是一个接口(interface)。有什么区别publicvoidfoo(Tt){...}和publicvoidfoo(Aa){...}? 最佳答案 使用一个对象时没有区别。但想象一下,如果你有classBextendsA{...}和publicvoidf(Listlist){...};和publicvoidf(Listlist){...};对于第一个,您可以传递一个完全属于List类型的列表.对于第二个,您可以传递一个列表,其中包含扩展A的对象。.但是,对于第一个,您不能做同样的事情。所以换句话说,你无法通过List到第一种方

Java泛型 - 从方法返回声明类型的子类型

我的类正在实现一个返回List的父类(superclass)方法.返回的列表是只读的:publicabstractclassSuperClass{publicabstractListgetComponents();}在我的类(class)中,我想返回一个声明为列表的字段——即一个子列表:publicclassSubClassextendsSuperClass{privateListbuttons;publicListgetComponents(){returnbuttons;}}这会产生一个编译器错误,如List不是List的子类型.我能理解为什么它不能编译,因为不允许将JTextFi

java - 如何获取 Foo<?> 对象的 <?> 值?

(这是我的previousquestion的后续)我有一个Foo对象,foo.Foo是一个接口(interface)。如何获取隐藏在后面的类型值?请注意,这不是微不足道的,因为foo例如可以是Bar类的对象,其中BarimplementsFoo,或一些实现接口(interface)的匿名类FloatFoo,其中FloatFooextendsFoo.我需要一个适用于所有情况的解决方案。提前致谢:) 最佳答案 使用反射是不可能的,因为Java泛型有TypeErasure的问题.在运行时,为通用类Foo定义的类型已被删除,因此对该类使用反