java中如何进行安全的类型转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何进行安全的类型转换相关的知识,希望对你有一定的参考价值。

参考技术A java中类型转换有自动转化跟强制类型转换;打个比方就是:int转double类型是自动转化,
而double转化成int是强制类型转化;(注意强制类型转化会造成数据丢失)
以下是大概类型转化:
byte->short->int->long->double
char->int ->long->double
char->int ->float->double
long->float

某些 Java 泛型类型转换中的类型安全警告是啥意思?

【中文标题】某些 Java 泛型类型转换中的类型安全警告是啥意思?【英文标题】:What is the meaning of the type safety warning in certain Java generics casts?某些 Java 泛型类型转换中的类型安全警告是什么意思? 【发布时间】:2008-08-02 08:58:27 【问题描述】:

Java 警告是什么意思?

类型安全:从 Object 到 List 的转换实际上是在检查已擦除的类型 List

当我尝试将 Object 强制转换为具有通用信息的类型时收到此警告,例如在以下代码中:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;

【问题讨论】:

如果您想去掉 Eclipse 中的黄色下划线,但又不想添加@SuppressWarning,您可以选择忽略首选项中的警告。在首选项窗口中,转到 Java > Compiler > Errors/Warnings,然后在 Generic types 部分下,更改选项 Unchecked generic type operation 忽略 【参考方案1】:

出现此警告是因为 Java 实际上并没有在运行时将类型信息存储在使用泛型的对象中。因此,如果object 实际上是List&lt;String&gt;,则在运行时不会有ClassCastException,除非从列表中访问与变量中定义的泛型类型不匹配的项。

如果项目被添加到列表中,这可能会导致进一步的复杂性,并且使用这种不正确的通用类型信息。任何仍然持有对列表的引用但具有正确的泛型类型信息的代码现在将具有不一致的列表。

要删除警告,请尝试:

List<?> list = (List<?>) object;

但是,请注意,您将无法使用某些方法,例如 add,因为编译器不知道您是否尝试添加不正确类型的对象。上面的方法在很多情况下都可以使用,但是如果你必须使用 add 或一些类似的受限方法,你将不得不在 Eclipse 中遇到黄色下划线(或 SuppressWarning 注释)。

【讨论】:

以上是关于java中如何进行安全的类型转换的主要内容,如果未能解决你的问题,请参考以下文章

使用泛型方法在Java中安全地进行强制类型转换

关于java中的short和int类型转换的问题

java中如何进行字符串和数据类型的转换?

某些 Java 泛型类型转换中的类型安全警告是啥意思?

Java中的强制类型转换是如何转换的?

Java中的强制类型转换是如何转换的?