java - 偷偷摸摸的 Java 类型转换

标签 java android compiler-construction casting aide-ide

在 Java (Android) 中,我有一些代码如下所示:

for (Tuple tuple : xRange) {
    Tuple5<Integer, Integer, Double, Double, Double> t = (Tuple5<Integer, Integer, Double, Double, Double>)tuple;
    ...
}

写起来可能很痛苦。顺便说一句,Tuple5 派生自 Tuple。

所以我写了这个方法:

@SuppressWarnings("unchecked")
public static final <U1, U2 extends U1> U2 cast(U1 inst) {
    return (U2)inst;
}

看起来很恶心吧?但这让我可以像这样重写代码:

for (Tuple tuple : xRange) {
    Tuple5<Integer, Integer, Double, Double, Double> t = cast(tuple);
    ...
}

我正在使用 AIDE 编译器在 Android 上进行编译。我认为它甚至可能无法在其他系统上编译。

我的问题是这适用于所有编译器吗?这是坏代码吗?如果是的话,为什么?

谢谢

最佳答案

我认为这很糟糕,因为类型删除,您收到编译器警告(您将其抑制)并不是偶然的。

你的方法

public static final <U1, U2> U1 cast(U2 inst) {
    return (U1)inst;
}

类型删除后看起来有点像这样:

public static final Object cast(Object inst) {
    return (Object)inst;
}

所以这不是类型安全的,该强制转换实际上什么也不做。您可以阅读有关类型删除的更多信息 here .

关于java - 偷偷摸摸的 Java 类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18176719/

相关文章:

c++ - 我需要做什么才能通过仅在我的 unix 系统上输入名称来运行我的 C++ 程序

Java反黑客。如何保护 jar 中的 .class 文件不被更改

java - 为一个类只创建一个对象并重复使用同一个对象

java - 应用程序每次崩溃 : Fatal Exception Main

Android:调用Web服务时操作超时

c - 为什么没有 LHS 的乘法在 C 语言中有效?

java - 将 HTTP GET 请求中的 JSON 数据从 JAVA 代码发送到 REST API

java - 我应该为 Web 应用程序使用 StringBuilder 还是 StringBuffer?

android - Android 中的处理程序和内存泄漏

c - 安装 BRugs "C compiler cannot create executables"时出错