Tag: 投射

Java Generic HashMap实现:对象无法转换V

我正在尝试实现一个通用的HashMap,但由于某种原因,java编译器不允许我返回正确的generics类型。 这是我的HashMap代码: public class SimpleHashMap { private int tableSize; private HashEntry[] table; public SimpleHashMap(){ table = new HashEntry[tableSize]; for(int i = 0; i < table.length; i++){ table[i] = null; } } public V put(K key, V value){ int keyIndex = getHashCode(key); if(table[keyIndex] == null){ table[keyIndex] = new HashEntry(key, value); } else{ table[keyIndex] = new HashEntry(key, […]

Javagenerics:声明generics类型的映射值

我是仿制药的新手。 像Map一样 private static Map map; 和像这样的方法 public T getObject(final Class myClass) { return (T)map.get(myClass); } 如何更改map声明,以便在从方法返回时不必进行强制转换?

被Javagenerics混淆需要强制转换

我对以下代码感到困惑: import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class GenericsTest { public void foo() { T var = (T) new LinkedList(); } public static void main(String[] args) { GenericsTest gt1 = new GenericsTest(); gt1.foo(); System.out.println(“Done”); } } 无论我传递给构造函数的Type参数如何, T的运行时类型似乎都是java.util.List 。 那么为什么编译器在分配var时需要转换为T ? 它不应该在编译时知道LinkedList可以分配给List吗? 我理解代码是假的,我理解为什么它在运行时工作,即使它看起来不应该。 令我困惑的部分是为什么编译器要求我在进行赋值时键入(T)? 然而,如果没有伪造的话,它就可以很好地编译。 据推测,编译器理解擦除。 看起来编译器应该能够在没有强制转换的情况下编译代码。

使用generics投射到内部类

请考虑以下代码: public class Outer { public class Inner{ } public static Outer.Inner get(){ Object o = new Object(); return (Outer.Inner)o; } public static void main(String[] args) throws Exception { Outer.get(); } } 此代码在Eclipse中成功编译,但无法在javac中javac : Outer.java:10: ‘)’ expected return (Outer.Inner)o; ^ Outer.java:10: ‘;’ expected return (Outer.Inner)o; ^ Outer.java:10: illegal start of expression return (Outer.Inner)o; ^ 3 […]

避免在具有多种值类型的地图中取消选中分配?

我在Java 7中遇到警告时遇到问题: Unchecked assignment: ‘java.lang.Class’ to ‘java.lang.Class’ 我在Class type = typeMap.get(key);行上得到它Class type = typeMap.get(key); 在下面的get函数中。 基本上我在这里想要做的是我想存储一堆未知类型的键/值对(但是所有都是Object的后代,除了null),但不会丢失类型。 所以我使用generics创建了一个包含以下内容的类。 它有两个映射(一个用于存储数据,另一个用于存储类类型: private Map dataMap = new HashMap(); private Map typeMap = new HashMap(); public void put(String key, T instance){ dataMap.put(key, instance); if (instance == null){ typeMap.put(key,null); } else { typeMap.put(key, instance.getClass()); } } public T get(String key){ Class […]

将Java对象转换为Java Map

我正在使用org.eclipse.jetty.util.ajax.JSON来解析JSON文本。 但是JSON.parse(string)方法产生一个Object,我需要它作为Map。 在内部,它是完全提到的类的对象。 但是,如何在不构建新对象或获取未经检查的强制转换警告的情况下将对象转换为映射? 目前,我发现只有一个解决方案没有未经检查的强制转换警告,但是构建了一个新的Map,实际上当然不是一个强制转换。 private Map getMap(String string) { HashMap result = new HashMap(); Object object = JSON.parse(string); if (object instanceof Map) { Map map = (Map)(object); for (Map.Entry entry : map.entrySet()) { String key = entry.getKey().toString(); Object value = entry.getValue(); result.put(key,value); } } return result; } 那么是否有一种方法可以在没有未经检查的投射警告的情况下正确施放它?

通用类型转换

我有以下类(简化但仍然是一个工作示例): class Test { List l = new ArrayList(); public Test() { } public void add(Object o) { l.add((T)o); } } 和测试代码: Test t = new Test(); t.add(1); t.add(1.2); t.add(-5.6e-2); t.add(“hello”); 一切都很好,这不是我所期待的。 add方法不应该抛出ClassCastException吗? 如果我添加一个或多或少相同的get方法: public T get(int i) { return l.get(i); } …/… t.get(1); // OK. t.get(3); // OK (?) Double d = t.get(3); // […]

Java:将对象转换为generics类型

在Java中从Object转换为其他类型时,为什么第二行会产生与转换相关的警告,但第一行不会? void a(Object o) { Integer i = (Integer) o; List list = (List) o; } /*Type safety: Unchecked cast from Object to List*/

如何在Java中使用generics来转换列表?

请考虑以下代码段: public interface MyInterface { public int getId(); } public class MyPojo implements MyInterface { private int id; public MyPojo(int id) { this.id = id; } public int getId() { return id; } } public ArrayList getMyInterfaces() { ArrayList myPojos = new ArrayList(0); myPojos.add(new MyPojo(0)); myPojos.add(new MyPojo(1)); return (ArrayList) myPojos; } return语句执行不编译的转换。 如何将myPojos列表转换为更通用的列表, 而无需遍历列表中的每个项目 ? […]

查找ArrayList 中保存的特定类型(即Object = String等)

假设我有一个ArrayList,我已经转换为对象的ArrayList。 我知道我投射的ArrayList中的所有对象都是相同的类型,但不是类型。 现在,如果ArrayList不为空,我可以使用其中的一个对象并使用instanceof运算符来了解实际类型。 但是ArrayList为空的情况呢? 我如何确定Object的实际类型呢? 可能吗? 编辑:回想起来,我认为空ArrayList的类型并不严格。 我可以丢弃旧的并且构造一个我正在寻找的正确类型的新空ArrayList。 它有点乱,所以如果有人有关于如何允许各种可能不共享相关公共超类(例如Integer和ArrayList)的潜在类型的替代建议,我愿意接受建议。 问题是,我有一个类,它将包含专门设计用于在其中互换的其他类。 包含的类可以对类型进行假设,因为它们是定义它的类型。 周围的类不能做出这样的假设,但必须确认它指定的类型与已插入其中的包含类相同。 因此我的问题是,包含类是通用的(generics指定它处理的类型),但它必须确保它传递的包含的类返回并操作指定给它的类型(它们被设计为可以单独创建,因此它们匹配的事实必须在插入时确认,而不是在创建它们时确认。