0 0

一个关于类型转换非常奇怪的问题0

public class MainTest {

	public static void main(String[] args){
		
		List<Integer> a = (List<Integer>)func();
		System.out.println(a);
		
	}
	
	public static List func(){
		List<String> ret = new ArrayList<String>();
		ret.add("hello");
		return ret;
	}
}



最后竟然能输出[hello]
为什么不会提示报错呢?是不是如上的类型转换只会检查最外层的类型List?
2012年7月20日 03:52

3个答案 按时间排序 按投票排序

0 0

采纳的答案

 public static void main(String[] args)
  {
    List a = func();
    System.out.println(a);
  }

  public static List func()
  {
    List ret = new ArrayList();
    ret.add("hello");
    return ret;
  }

用编译工具查看生成的.class文件,还原成这样的代码!

另外java的泛型是编译时检查而已。你可以尝试
System.out.println((Integer)a.get(0)); ClassCastException就会出现了。 
System.out.println((String)a.get(0));编译器会报错,不允许的。

2012年7月20日 10:24
0 0

java泛型就是编译后都会被擦除了,泛型只是在编译前规范和验证的

2012年7月20日 10:53
0 0

为啥要报错呢。问题在于你强转之后啥也没做就打印一下list。
如果有数据的读取或者添加操作就会出错了。。
然后打印么,就直接call list的 toString method了。
list的toString method 应该是没有泛型安全的。

2012年7月20日 07:43

相关推荐

    JS面试题大坑之隐式类型转换实例代码

    JavaScript中的隐式类型转换是开发者在编写代码时经常会遇到的一个陷阱,尤其在面试中,它经常作为考察开发者对语言理解深度的问题出现。本篇主要探讨的是JavaScript中的隐式类型转换,特别是那些容易出错的实例代码...

    javascript中一些数据类型以及奇怪的特性

    在JavaScript中,数据类型是一个非常重要的概念,它决定了变量如何存储和操作数据。JavaScript是一种动态类型语言,这意味着我们不需要在声明变量时指定其类型,它会自动根据赋值来确定。然而,JavaScript的数据类型...

    C++隐式转换问题分析及解决办法

    3. 带符号类型和无符号类型的转换:如果一个运算对象是无符号类型、另外一个运算对象是带符号类型,而且其中的无符号类型不小于带符号类型,那么带符号的运算对象转换成无符号的。 隐式转换的问题 ----------------...

    jsp文件编码转换工具(utf-8到GBK或相反)

    标题“jsp文件编码转换工具(utf-8到GBK或相反)”涉及的核心知识点是关于字符编码的转换,特别是在JavaServer Pages (JSP) 文件中的应用。JSP是Java Web开发的一种技术,用于创建动态网页。在这个场景中,我们关注...

    一个简单的奇怪的计算器

    【标题】:“一个简单的奇怪的计算器” 这个项目是基于Android Studio开发的一款初级计算器应用,名为“我的计算”(Mycalculate)。它展示了如何利用Java语言和Android SDK来创建一个基本的用户界面,并实现简单的...

    JDK 5.0中的泛型类型学习

    但是,对于初次使用泛型类型的用户来说,泛型的某些方面看起来可能不容易明白,甚至非常奇怪。在本月的“Java 理论和实践”中,Brian Goetz 分析了束缚第一次使用泛型的用户的常见陷阱。您可以通过讨论论坛与作者和...

    有关java中的Date,String,Timestamp之间的转化问题

    Java 中的日期和时间处理是编程中非常重要的一方面,Date、String 和 Timestamp 是三种常用的日期和时间类型,本文将详细介绍它们之间的转换问题。 一、获取系统当前时间 在 Java 中,可以使用以下三种方法来获取...

    《你必须知道的495个C语言问题》

    1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? 15 1.29 为什么我的编译器不允许我定义大数组,如double array[256][256]? 15 命名空间 15 1.30 如何判断哪些标识符可以使用,...

    你必须知道的495个C语言问题

    1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? 1.29 为什么我的编译器不允许我定义大数组,如doublearray[256][256]? 命名空间 1.30如何判断哪些标识符可以使用,哪些被保留了...

    C#中处理多位小数精度的精度问题

    在压缩包中的文件列表中,我们看到了`App.config`,通常用于配置应用程序的行为,可能包含了关于数据类型转换或精度设置的配置信息。`Program.cs`是主程序文件,可能包含了处理小数精度问题的代码示例。`.csproj`和`...

    C语言中指针使用应注意的问题.pdf

    在这里,ptr 是一个指针,但它没有被初始化为一个确定的地址。这样,ptr 的值可能是任何值,而不是我们期望的值。 为了避免这种情况,我们需要在使用指针之前将其初始化为一个确定的地址。例如: int a = 1; int* ...

    程序员面试宝典第三版 —— 程序员面试系列之2 带目录书签无恶心广告水印

    这种方式会导致原始`float`值被解释为`int`类型,输出时通常会得到一个奇怪的十六进制数值(例如`3F80000`),这是因为浮点数的内部表示与整数不同。 ### 知识点三:数据类型和内存布局 - **浮点数与整数的内存...

    C语言FAQ 常见问题列表

    我试了类型转换, 但是不行。 * 6. 空 (null) 指针 o 6.1 臭名昭著的空指针到底是什么? o 6.2 怎样在程序里获得一个空指针? o 6.3 用缩写的指针比较 ``if(p)" 检查空指针是否可靠?如果空指针的内部表达不是 ...

    C语言学习中容易误解的几个问题.pdf

    多个运算符在一个表达式运算中是一个麻烦的问题,避免这种问题的一个方法是将所有的东西都用括号括起来,但表达式中的括号过度就会难以理解,因此最好还是记住 C 中的优先级。然而,这有 15 个,太困难了。然而,...

    你必须知道的495个C语言问题(PDF)

    我试了类型转换, 但是不 行。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5 空(null) 指针21 5.1 臭名昭著的空指针到底是什么? . . . . . . . . . . . . . . . . . . . 21 5.2 怎样在...

    c#与api类型对照表

    虽然这看起来有些奇怪,因为`BOOL`通常期望的是一个布尔值,但在Win32 API中,`BOOL`实际上是一个整型值,其非零值视为真,零值视为假。 2. **BYTE**:在API中表示为`BYTE`,在C#中则对应`System.UInt16`。这里的...

    我怀疑这是IDEA的BUG,但是我翻遍全网没找到证据!.doc

    本文主要探讨了 Lombok @Data 注解生成的 hashCode 方法中的一个奇怪的问题:在 IDEA 中,hashCode 方法的第一行代码为 `int PRIME = true;`,而不是预期的数字常量。这引发了作者对这个问题的研究和探索,包括使用 ...

    2021“蓝桥杯”全国软件专业人才设计与创业大赛题目-预赛借鉴.pdf

    这是一个关于回文数和位值转换的问题。福尔摩斯和华生面临的挑战是找到一个数字,使得将它与ABCDE的乘积得到的回文数是EDCBA。可以通过穷举或编程的方法,遍历所有可能的数字,检查它们与ABCDE的乘积是否满足条件。...

Global site tag (gtag.js) - Google Analytics