Tag: generics

generics,方法签名,作业

我以为我理解这一点,但显然不是…… 我有这样的方法签名: void doSomething(List typeAs){…} List<TypeA> getTypeBTypeAs(){…} 但如果我试着打电话 doSomething(getTypeBTypeAs()); 我得到一个编译错误:“类型…中的方法doSomething(List)不适用于参数(List>)” 但是,如果我改变doSomething的签名 void doSomething(List<TypeA> typeAs){…} 它仍然不起作用,但是 void doSomething(List typeAs){…} 显然它可以用来绕过generics。 这看起来很奇怪。 有人能填补我吗? 此外,在这种情况下,我希望doSomething可以处理任何包含任何generics类型的TypeAs的List; undefined,TypeB,TypeC等 谢谢。

Java嵌套通配符generics将无法编译

我在Javagenerics中遇到有界嵌套通配符的问题。 这是一个常见的情况: public void doSomething(Set set) {} public void callDoSomething() { Set set = new HashSet(); doSomething(set); } 这是标准的Javagenerics,工作正常。 但是,如果通配符变为嵌套,则它不再起作用: public void doSomething(Map<String, Set> map) {} public void callDoSomething() { Map<String, Set> map = new HashMap<String, Set>(); doSomething(map); } 这会导致编译器错误。 我尝试了各种演员表和通配符排列,但我无法使其正常工作。 我不记得以前看过这个问题了,多年来我一直在使用仿制药。 我是否太累了,错过了一些明显的东西?

避免generics类型的表单Foo <ActualType扩展了Foo >

我经常发现自己想要编写表单的generics类定义 public class Foo<ActualType extends Foo> 例如,在这样的设置中: public interface ChangeHandler { public void onChange(SourceType source); } public class Foo<ActualType extends Foo> { private final List<ChangeHandler> handlers = new ArrayList(); public void addChangeHandler(ChangeHandler handler) { handlers.add(handler); } @SuppressWarnings(“unchecked”) protected void reportChange() { for (ChangeHandler handler: handlers) handler.onChange((ActualType) this); } } public class Bar extends Foo { […]

当我不提供generics类型时,为什么这个类的行为会有所不同?

我不明白为什么这会混淆编译器。 我使用generics类型T来保存与put和get方法无关的对象。 我一直认为GenericClass和GenericClass在function上是相同的,但我必须弄错。 编译DoesntWork类时,我得到incompatible types – required: String – found: Object 。 Works类完成了我的期望。 这里发生了什么? public class GenericClass { public void put(Class key, V value) { // put into map } public V get(Class key) { // get from map return null; } public static class DoesntWork { public DoesntWork() { GenericClass genericClass = new GenericClass(); […]

从Class对象中指定java中的generics类型

为什么这是错的: Class type = Integer.class; ArrayList = new ArrayList(); ? 在给定类对象的情况下,是否无法实例化特定类型的类? 显然我永远不会直接这样做,这只是展示所需内容的一个例子。 在我需要的实际代码中,我不知道该类型的名称。 例如 public void createAList(Class type) { ArrayList toReturn = new ArrayList(); return toReturn; }

将Generic类的子类分配给此类的超类

我有几个提供的接口 public interface Finder<S extends Stack,T extends Item> { public S find(S s, int a); } public interface Stack { Stack getCopy(); } 和实现第一个的类: public class SimpleFinder<S extends Stack,T extends Item> implements Finder{ public S find(S s, int a){ S stack = ….; … stack = s.getCopy(); \\Error: incompatible types \\ required: S \\ found: […]

无法实例化generics中的类型

我有这门课 public class Tree { //List of branches for this tree private List<Tree> branch = new ArrayList<Tree>(); public Tree(T t){ this.t = t; } public void addBranch(Tree src){ branch.add(src); } public Tree getBranch(int branchNum){ return (Tree) branch.get(branchNum); } private T t; } 我正在尝试使用此类创建一个变量 public static void main(String[] args){ Tree num2 = new Tree(2); } 它给了我这个错误 […]

Javagenerics为什么我不能实例化泛化类型

我正在使用generics写东西,令我惊讶的是我发现这不起作用: class foo{ T innerT = new T(); } 所以我不能实例化generics类型? 有没有办法做到这一点?

generics类中的嵌套generics

我想在我的api中提供类似的东西: class Foobar extends AbstractThing class EventThing { public Foobar getSource(); public Double getValue(); } 所以我写这个: class EventThing<T extends AbstractThing> { public T getSource(); public U getValue(); } 但java无法解析U 使用EventThing<T extends AbstractThing,U>代替它工作,但第二个U实际上是冗余的’因为AbtractThing已经定义了Type。 所以我喜欢摆脱它。

Java:如何在SomeClass 中设置“T”的默认值?

有没有办法为通用模板指定默认类型? 假设我有一个Monkeyclass。 猴子可以生活在不同的Environment ,例如Jungle或Zoo : 公共类Monkey { T家; … public T getHome() { 回家; } } 有没有办法为T指定默认值,所以我可以使用Monkey类型而不是Monkey而不会收到编译器警告? 编辑 换句话说,有没有办法摆脱“原始类型”警告而不必明确压制它?