Tag: 投射

如何将generics类的类对象转换为该类型的特定实例

我有一个通用接口,我们称之为GenericInterface 。 我需要将该接口的类对象传递给期望(通过另一个类型参数指定)该类型的特定实例的方法。 我们假设我想调用java.util.Collections.checkedList() : List<GenericInterface> list = Collections.checkedList( new ArrayList<GenericInterface>(), GenericInterface.class); 这不起作用,因为Class不能隐式地转换为Class<GenericInterface> ,最安全的方法是什么? 我能想到的最好的是: List<GenericInterface> list = Collections.checkedList( new ArrayList<GenericInterface>(), (Class<GenericInterface>) (Class) GenericInterface.class); 它可以工作,但不会保护我免于例如将列表的类型更改为List而不用List替换类对象参数。

当已知Field和Value扩展Mirror时,是否可以将Map 转换为Map ?

我试图向上投射Map到Map 。 使用强制转换是有意义的,因为Field and Value extend Mirror ,但是我遇到了”cannot cast” error 。 是否根本无法cast Maps with double types ? 如果是这样,我怎么能投? 我将不胜感激任何帮助! 谢谢, 院长

如何将地理位置经度+纬度转换为双倍?

我正在检索地图视图的中心,我需要将long和lats作为双精度传递给我的服务器以便对数据库进行测试。 我如何将mapView.getMapCenter()。getLongitudeE6()转换为double?

java:如何修复未选中的强制转换警告

我有以下代码: private HashMap<Class, HashMap> m_componentStores; public T getComponent(Entity e, Class exampleClass) { HashMap store = m_componentStores.get(exampleClass); T result = (T)store.get(e); if (result == null) { throw new IllegalArgumentException( “GET FAIL: “+e+” does not possess Component of class\nmissing: “+exampleClass ); } return result; } 当我编译时,它显示T result = (T)store.get(e)有一个未经检查的强制转换。 Type safety: Unchecked cast from capture#2-of ? extends […]

用Java编写的惰性类?

有人可以告诉我为什么我在这个片段中没有得到ClassCastException ? 我非常感兴趣的是它为什么不像我期望的那样工作。 我不关心这是否是糟糕的设计。 public class Test { static class Parent { @Override public String toString() { return “parent”; } } static class ChildA extends Parent { @Override public String toString() { return “child A”; } } static class ChildB extends Parent { @Override public String toString() { return “child B”; } } public C […]

如何在java中转换genericsList类型?

好吧,我有一个类Customer(没有基类)。 我需要从LinkedList转换为List。 有没有干净的方法来做到这一点? 只是你知道,我需要把它投到List。 没有其他类型可以做。 (我正在使用Slim和FitNesse开发测试夹具)。 编辑:好的,我想我需要在这里给出代码示例。 import java.util.*; public class CustomerCollection { protected LinkedList theList; public CustomerCollection() { theList = new LinkedList(); } public void addCustomer(Customer c){ theList.add(c); } public List getList() { return (List) theList; } } 因此,根据Yuval A的评论,我终于以这种方式编写了代码。 但我得到这个错误: CustomerCollection.java:31: incompatible types found : java.util.List required: java.util.List return (List)theList; ^ 1 error […]

为什么List 不能作为List ?

考虑下面的方法doSomething(List)接受List作为参数。 private void doSomething(List list) { // do something } 现在考虑下面的代码片段,它尝试调用doSomething() ,我尝试将List传递给doSomething() List objectList; List stringList; doSomething(stringList); // compilation error incompatible types doSomething(objectList); // works fine 即使在代码下面也会引发编译错误 objectList = stringList; // compilation error incompatible types 我的问题是为什么List无法传递给接受List ?

Java if三元运算符和Collections.emptyList()

你能解释为什么第一个返回类型的代码无法编译? 消息是: Type mismatch: cannot convert from List to List Type mismatch: cannot convert from List to List 。 在第二种情况下是否插入了显式转换? public class GenericsTest { private String getString() { return null; } public List method() { String someVariable = getString(); //first return type //return someVariable == null ? Collections.emptyList() : Collections.singletonList(someVariable); //second return type if (someVariable […]

Javagenerics并转换为基本类型

我目前正在尝试学习如何使用一本书中的generics。 在本章中,它说要获取一段数据T并将其转换为整数。 我在Eclipse中尝试不同的东西,但似乎没有人允许这样做。 你怎么能执行以下任务: LinkedList arr = new LinkedList(); Float fl = 8.74273123948; arr.add(fl); 然后在另一个class级: public int findValue(Node node) { T data = node.data; int value = Number.valueOf(data); return value; } 我尝试过在其他一些事情中使用.valueOf()和(int) ,似乎没有什么可以满足Java。 本书坚持保持方法通用,以防使用浮点数或双精度数而不是字符串或整数。 编辑:对于可能有类似问题的其他人。 从对这个问题的所有评论和接受的答案中收集到: 对数据使用.toString(),然后根据需要解析它,无论您需要哪种数据类型。

在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 […]