当前位置: 首页 > 面试题库 >

将字符串分配给列表,而没有编译错误

程鸿煊
2023-03-14
问题内容

据我所知,Java中泛型的主要目的之一是提供编译时类型安全性。如果它被编译,代码将运行没有问题。

那么为什么要编译以下代码?

public static void main(String[] args) {
    String s = getList();
}

private static <T extends List> T getList() {
    return (T)new ArrayList();
}

它编译良好。我的类型安全编译在哪里?该getList()方法与String类没有任何共同之处。


问题答案:

这本质上不是类型擦除问题,而是几乎相反的情况:当系统知道实际类型时,就会在运行时遇到问题,而编译时却不会。编译的原因是那List是一个接口。就编译器而言,的子类String可能实际上实现了该接口,因此编译器认为可能存在有效的运行时情况,其中返回的实际对象String也是aList。编译器不认为String是最终的,因此实际上无法创建List-implementing String类。

至于为什么在编译过程中不考虑final,Bohemian对问题的评论给出了很好的解释。



 类似资料:
  • 问题内容: 我需要在SQL Server 2012中将一列中的字符串拆分为一个字符,并将每个字符串拆分成它自己的列。 例如:如果我有一个栏,我需要把它拆分成,,,,,与每个这些转化为自己列。 要拆分的列的长度可能会有所不同,因此我需要使其尽可能地动态。 问题答案: 您可以这样做: 输出: 这是动态版本:

  • 问题内容: 我正在努力寻找合适的措词来回答我的问题(这可能就是为什么我无法使用Google),但归结为:为什么下面的行无效? 我收到了一个编译时错误。班级和班级。 我已经阅读了有关泛型的Oracle文档,但显然这里缺少一些关键之处。朝正确方向轻推将不胜感激! 问题答案: 今天早些时候,我认为您想成为的数据类型。当然,这是将与您创建的对象匹配的数据类型,但是我怀疑在这种情况下它是否真的是您想要的。请

  • 问题内容: 我对Regex的经验不足,但是我已经阅读了很多。假设有一个字符串,我想要一个列表,该列表的字符串分为两个部分。我的方法是让一个小组检查是否是数字,然后检查该小组是否重复。像这样 我认为基本上可以检查“ digit”或“ digit +”是否相同。我认为这可以满足我的要求。 问题答案: 用途:

  • 问题内容: 本质上,我想从文件中吸收一行文本,将字符分配给列表,并创建列表中所有单独字符的列表-列表列表。 此刻,我已经尝试过了: 这就是我所拥有的。我不太了解如何提取单个字符并将其分配给新列表。 我从文件中得到的行将类似于: 我想把它变成这个列表,每个单独的字符: 问题答案: 字符串是可迭代的(就像列表一样)。 我的意思是您确实想要这样的东西: 要么 要么 字符将包含文件中的所有字符。

  • 即时创建一个小电子邮件脚本与PHPMailer SMTP身份验证。我现在试着用错误的密码发送一封电子邮件——但它仍然会给成功带来“真实”的回报...有人知道吗?' 以下是我用来调用sendmail的函数: 这是我的PHPMailer函数 $smtp包含一个数组,其中包含所有SMTP信息、电子邮件地址、签名、Smtp服务器、端口、用户名、密码和SSL用法... 我敢肯定,我使用了错误的用户名和密码,

  • 与有界通配符相关的编译器错误 Java:通配符类型不匹配导致编译错误