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

java:如何使用clone()以及强制检查

诸葛嘉熙
2023-03-14
问题内容

这段代码:

class RawStringIterator {
        java.util.Stack<State> stateStack = new java.util.Stack<State>();
        RawStringIterator(RawStringIterator i) {
              stateStack = (java.util.Stack<State>) i.stateStack.clone();
        }
        /* ... */
}

给我这个警告:

Type safety: Unchecked cast from Object to Stack<Utils.OperatorTree.RawStringIterator.State>

我想我可以忽略这里的警告。但是我想知道clone()一般如何使用吗?我@SuppressWarnings("unchecked")每次都必须每次都要使用clone()吗?还是我应该总是做完全多余的额外检查?


问题答案:

如果您有选择的话,那么最好不要执行/使用它clone(),因为这是一个损坏的API。只需实现/使用复制构造函数即可。

如果出于某些紧迫原因必须使用clone()但可以更改其实现,请考虑声明Stack<T>.clone()返回Stack<T>而不是Object-自Java5以来,协变返回类型是合法的。

更新:
如果有Stack问题java.util.Stack,请考虑其Javadoc:

Deque接口及其实现提供了一组更完整和一致的LIFO堆栈操作,应优先于此类使用。

并且例如ArrayDeque提供一个拷贝构造器。



 类似资料:
  • 问题内容: 有一个在Tomcat上运行的JDK7应用程序,它具有以下环境设置: 上面的设置可确保在进行API调用等操作时通过HTTPS连接时不使用TLS 1.0。 我们还使用org.springframework.mail.javamail。 JavaMailSenderImpl 类发送外发SMTP电子邮件,并使用以下道具: 问题是,当升级到TLS1.2时,与SMTP电子邮件服务器的连接失败。 j

  • 问题内容: 不知何故,我的旧问题已关闭,因此我打开了一个新问题: 我正在使用Java泛型从SQL查询中实现泛型双向Hash Map。它应该能够来回映射String,Integer对的任何组合。应该这样使用: 当然应该可以创建一个pm(Integer,Integer)等等。 我选择地图的实现如下所示(没有getter …): 我没有编译器错误,而且我很确定,它将以这种方式工作。但是我在“ getIn

  • 我想使用ArchUnit来强制使用SLF4J日志框架,避免使用简单的系统。out调用。此外,我希望避免使用任何其他日志框架。我该如何实施此类检查? 目前我写了这个测试 但它实际上并没有强制SLF4J的使用,只是限制的使用,并防止依赖于类(实际上常量所在的位置)。 是否是我的案例更优雅的解决方案?

  • 问题内容: 是否有一个静态分析工具可以在IDE外部运行一致地强制使用@Override注释?CheckStyle具有MissingOverride检查,但仅适用于使用@inheritDoc Javadoc标记的方法。我正在寻找一种可以在连续集成计算机上的新构建配置中运行的工具。 问题答案: 一种方法是使用TeamCity的“检查”运行器。我不确定它是否真的可以在IDE之外运行,因为它是在Intel

  • 在Tomcat上运行JDK7应用程序时,它确实具有以下环境设置: 上面的设置确保我们在进行API调用等时通过HTTPS连接时不使用TLS 1.0。 我们还使用org.springframework.mail.javamail.JavaMailSenderImpl类发送传出的SMTP电子邮件,并使用以下道具: 问题是,升级到TLS1时,与SMTP电子邮件服务器的连接失败。2. javax。网ssl。

  • 由于Log4Shell漏洞,我想搜索并找出我的Java项目是直接实现Log4j还是通过依赖关系实现Log4j,以及哪个版本。 例如,我有使用这些依赖关系管理工具的项目: Maven项目 如何在这些类型的依赖关系管理工具上实现这一点? 有关漏洞的详细信息(包括缓解步骤): CVE-2021-44228 Apache Log4j安全漏洞