Tag: generics

在所有方法调用中允许类型见证的重点是什么?

假设我们有两种方法,如下所示: public static T genericReturn() { /*…*/ } public static String stringReturn() { /*…*/ } 在调用任何方法时,无论是否有任何要求,您都可以提供类型见证: String s; s = Internet.genericReturn(); //Type witness used in return type, returns a String s = Internet.stringReturn(); //Type witness ignored, returns a String 但是我根本没有在Java中看到任何实际用途,除非无法推断出这种类型(这通常表明存在更大的问题)。 另外,当它没有被适当地使用时它被简单地忽略这一事实似乎违反直觉。 那么在Java中有什么意义呢?

Java嵌套generics类型

为什么必须使用generics类型Map<?, ? extends List> 对于以下test()方法Map<?, List> Map<?, ? extends List>而不是更简单的Map<?, List> ? public static void main(String[] args) { Map<Integer, List> mappy = new HashMap<Integer, List>(); test(mappy); } public static void test(Map<?, ? extends List> m) {} // Doesn’t compile // public static void test(Map<?, List> m) {} 注意到以下工作,并且三种方法无论如何都具有相同的擦除类型。 public static void test(Map<?, List> m) {}

在Java中转换为generics类型不会引发ClassCastException?

我遇到了一个奇怪的Java行为,看起来像个bug。 是吗? 即使对象不是K的实例,将Object转换为generics类型(例如, K )也不会抛出ClassCastException 。 这是一个例子: import java.util.*; public final class Test { private static void addToMap(Map map, Object … vals) { for(int i = 0; i < vals.length; i += 2) map.put((K)vals[i], (V)vals[i+1]); //Never throws ClassCastException! } public static void main(String[] args) { Map m = new HashMap(); addToMap(m, “hello”, “world”); //No exception […]

使用点运算符在java中调用奇数方法来访问通用列表

我遇到了一些高级的java代码(对我来说很先进:))我需要帮助理解。 在类中有一个嵌套类,如下所示: private final class CoverageCRUDaoCallable implements Callable<List> { private final long oid; private final long sourceContextId; private CoverageCRUDaoCallable(long oid, long sourceContextId) { this.oid = oid; this.sourceContextId = sourceContextId; } @Override public List call() throws Exception { return coverageCRUDao.getCoverageCRUData(oid, sourceContextId); } } 稍后在外部类中,创建了一个可调用类的实例。 我不知道这是什么: ConnectionHelper.<List> tryExecute(coverageCRUDaoCallable); 它对我来说看起来不像java语法。 你能详细说明这种神秘的语法会发生什么吗? 您可以在代码摘录中看到它在下面使用。 CoverageCRUDaoCallable coverageCRUDaoCallable = new CoverageCRUDaoCallable( dalClient.getOid(), […]

初始化类型Generic的Java通用数组

所以我有一个我正在开发的通用HashTable类,我想将它一般用于任意数量的传入类型,我还想将内部存储数组初始化为LinkedList的数组(用于冲突),其中每个LinkedList都是提前指定的(对于类型安全性)是HashTable类中generics的类型。 我怎么能做到这一点? 以下代码最能说明我的意图,但当然不能编译。 public class HashTable { private LinkedList[] m_storage; public HashTable(int initialSize) { m_storage = new LinkedList[initialSize]; } }

错误:通用数组创建

我不明白通用arrays创建的错误。 首先,我尝试了以下内容: public PCB[] getAll() { PCB[] res = new PCB[list.size()]; for (int i = 0; i < res.length; i++) { res[i] = list.get(i); } list.clear(); return res; } 然后我尝试这样做: PCB[] res = new PCB[100]; 我必须错过一些似乎正确的事情。 我试着把它抬起来,我真的做到了。 没有任何东西在点击。 我的问题是:我该怎么做才能解决这个问题? 错误是: .\Queue.java:26: generic array creation PCB[] res = new PCB[200]; ^ Note: U:\Senior Year\CS451- file uses […]

通配符背后的目的是什么?它们与generics有何不同?

我几天前从未听说过野猫,在读完老师的Java书之后,我仍然不确定它是什么,为什么我需要使用它。 假设我有一个超级Animal和几个子类,如Dog , Cat , Parrot等……现在我需要有一个动物列表,我的第一个想法是这样的: List listAnimals 相反,我的同事们推荐的内容如下: List listAnimals 为什么我应该使用通配符而不是简单的generics? 假设我需要一个get / set方法,我应该使用前者还是后者? 他们怎么这么不同?

Java HashMap使用通配符嵌套generics

我正在尝试制作一个hashmap值的hashmap,其中包含自定义类的不同子类的hashsets,如下所示: HashMap<String, Hashmap<String, HashSet>> superMap AttackCard有子类,如: Mage , Assassin , Fighter 。 superMap中的每个HashMap只会包含一个包含AttackCard单个子类的AttackCard 。 当我尝试放一个 HashMap<String, HashSet> 进入superMap,我得到一个编译器错误: 下面是发生错误的代码: public class CardPool { private HashMap<String, HashMap<String, HashSet>> attackPool = new HashMap(); private ArrayList auxiliaryPool; public CardPool() { (line 24)this.attackPool.put(“assassins”, new AssassinPool().get()); /* this.attackPool.put(“fighters”, new Fighter().getPool()); this.attackPool.put(“mages”, new Mage().getPool()); this.attackPool.put(“marksmen”, new Marksman().getPool()); this.attackPool.put(“supports”, new Support().getPool()); this.attackPool.put(“tanks”, […]

Java noob:仅针对对象的generics?

我是Java的新手。 在编写Map 时,我发现声明Map是一个语法错误,而Map是正常的。 是否只能在Java中实例化对象类型的generics,而不是原语? 如果是这样,基元的装箱/拆箱会有明显的性能损失吗?

Javagenerics问题:类“不在类型变量的范围内”错误。

我正在研究一个涉及generics的课程。 public interface Keyable {public String getKey();} public interface DataElement extends Comparable<Keyable>, Keyable, Serializable {…} public class Course implements DataElement {…} public interface SearchTree<K extends Comparable<Keyable> & Keyable> extends Serializable {…} public class MySearchTree implements SearchTree { … private class Node { public Course data; public Node left; public Node right; … } } 当尝试在MySearchTree的声明中使用Course类时,我收到一个类型参数错误,指出“Course不在类型变量K的范围内”。 […]