Tag: generics

generics..? 超级T

可能重复: Java Generics中’super’和’extends’之间的区别是什么? 一个) List shapeSuper = new ArrayList(); shapeSuper.add(new Square()); //extends from SHAP shapeSuper.add(new DoubleSquare()); //extends from SQ shapeSuper.add(new TripleSquare()); //extends from DS shapeSuper.add(new Rectangle()); //extends from SHAP shapeSuper.add(new Circle()); //extends from SHAP for (Object object : shapeSuper) { … } 当我只能添加Shape及其衍生物时,为什么迭代必须是Objects? B) List shapeSuper = new ArrayList(); shapeSuper.add(new Object()); //compilation error 为什么上面的行会产生编译错误?

使用inheritance构建通用树

我正在构建一个通用的Tree类,它支持子树的inheritance。 但我遇到了一些问题。 请你帮帮我吗? 描述 让我们定义Tree类和BlueTree类,其中BlueTree extends Tree 。 让我们定义Leaf类和RedLeaf类,其中RedLeaf extends Leaf 。 它们被用作树包含的“数据”。 Tree表示Tree类型的Tree ,其“data”是Leaf类型。 对于inheritance (这不是适当的Javainheritance): Tree可以有类型的子项 Tree , Tree , BlueTree和BlueTree 。 。 Tree可以有类型的子项 Tree和BlueTree , 但不是 Tree或BlueTree 。 。 BlueTree可以有类型的子项 BlueTree和BlueTree , 但不是 Tree或Tree 。 。 BlueTree可以有类型的子项 BlueTree , 但不是 Tree , Tree或BlueTree 。 *这里,“孩子”是指树的分支/叶子。 (有点复杂,这就是我将线分开的原因。) 代码 (如果你有一个解决方案,你可能不需要阅读下面我的尝试的详细说明。如果你想一起找到解决方案,我的代码可能会给你一些想法 – 或者,它可能会混淆它们。) 初审 :(简单的) […]

为什么以及什么是多态generics类型

什么时候应该使用像这样的通用多态类型,它的含义是什么? 1. List list = new ArrayList(); 2. List list = new ArrayList(); 3. List list = new ArrayList(); 有人会用这样的东西 List list = new ArrayList(); List list = new ArrayList(); 注意:我理解人们何时使用List List或List 在方法定义中List 。 但我不明白的是多态generics类型对象创建。

为什么我不能将类型参数显式传递给通用Java方法?

我已经定义了一个Java函数: static List createEmptyList() { return new ArrayList(); } 调用它的一种方法是这样的: List myList = createEmptyList(); // Compiles 为什么我不能通过显式传递generics类型参数来调用它? : Object myObject = createEmtpyList(); // Doesn’t compile. Why? 我从编译器得到错误Illegal start of expression 。

Java 8generics函数应该是不明确的,但在运行时失败

我正在尝试将Java 7代码迁移到Java 8,所以我的代码类似于: package tests; import java.util.Arrays; import java.util.Map; public class Tests { private static interface ComparableMap extends Map, Comparable {} public static void main(String[] args) { func(getString()); } private static void func(Comparable…input){ System.out.println(Arrays.toString(input)); } private static void func(ComparableMap m){ System.out.println(m); } private static T getString(){ return (T) “aaa”; } } 在java 7中它正常工作,在java 8中我得到: java.lang.ClassCastException:java.lang.String无法强制转换为tests.Tests […]

为什么这种类型不能替代类型参数?

我正在尝试使用generics来支持委托对象(装饰器,包装器)的可配置结构。 我想构建一个委托链,它实现了一个目标接口以及一个通用委托接口。 我有这个大纲: class Test { static interface Delegator {} static class DelegatorChain<T extends Delegator> {} static interface Foo {} static class FooDelegator implements Delegator, Foo {} public static void main(String[] args) { DelegatorChain chain = new DelegatorChain(); } } 但是,当试图实例化chain变量时,编译器抱怨: 绑定不匹配:类型Test.FooDelegator不是有效参数的有效替代<T extends Test.Delegator> ,类型为Test.DelegatorChain 我承认generics对我来说就像魔术一样,但我可以以某种方式承认FooDelegator不是扩展 Delegator 的Foo,它只是实现了两个接口。 鉴于我很清楚我想要完成什么,是否有什么我可以用gertics来解决它,或者我只是更好地忘记了它?

什么是LinkedHashMap ?

好的,所以我是这些HashMaps的新手,但对LinkedLists和HashMaps有一些了解。 如果你能给我一些关于LinkedHashMap的简单解释并且在titile中这意味着我们明确地将它定义为某种类型会很棒吗?

了解Javagenerics。 输入参数约定

最常用的类型参数名称是: E – Element(Java Collections Framework广泛使用) K – 钥匙 N – 数字 T型 V – 价值 S,U,V等 – 第2,第3,第4类型 我似乎不太清楚每个字母到底对应的是什么。 我知道每个字母只代表一个惯例,但第二,第三和第四类是什么意思? 我什么时候应该用什么? 在他们的官方教程网站上,它没有提供进一步的信息。

如何使用Google GSON将JSON数组反序列化为generics类型的集合?

我正在编写一些代码,用于从网站中检索资源。 它看起来像这样: public Collection getProjects() { String json = getJsonData(methods.get(Project.class)); //Gets a json list, ie [1, 2, 3, 4] Gson gson = new Gson(); Type collectionType = new TypeToken<Collection>() {}.getType(); return gson.fromJson(json, collectionType); } 所以我很自然地尝试使用Javagenerics来抽象它。 /* * Deserialize a json list and return a collection of the given type. * * Example usage: getData(AccountQuota.class) -> […]

如何在Javagenerics中获取类型变量的类

我见过类似的问题,但他们没有多大帮助。 例如,我有这个通用类: public class ContainerTest { public void doSomething() { //I want here to determinate the Class of the type argument (In this case String) } } 和另一个使用此容器类的类 public class TestCase { private ContainerTest containerTest; public void someMethod() { containerTest.doSomething(); } } 是否有可能在方法doSomething()中确定类型参数的类而没有显式类型变量/字段或ContainerTest类中的任何构造函数 ? 更新:更改ContainerTest类的格式