精华内容
下载资源
问答
  • Python @deprecated装饰器弃用旧的python类,函数或方法。 安装 pip install Deprecated 用法 要使用此功能,请使用@deprecated装饰器装饰不推荐使用的函数: from deprecated import deprecated @ deprecated def ...
  • 主要介绍了PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法,是在进行PHP数据库程序开发中常会遇到的错误,需要的朋友可以参考下
  • 这与mysql版本无关系,php 5.x版本,如5.2、5.3、5.4、5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in ...
  • Installing MySQL system tables...2015-08-13 14:20:09 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for ...
  • /home/data/anaconda3/lib/python3.7/site-packages/pymysql/cursors.py:170: Warning: (1681, 'Integer display width is deprecated and will be removed in a future release.') result = self._query(query) ...
  • 【NPM解决方案】npm WARN deprecated core-js@2.6.11: core-js@< 3 is no longer maintained and not recommended for usage Administrator@GuoXinYu MINGW64 /d $ npm install -g vuepress npm WARN deprecated ...
  • Deprecated.js 不推荐使用JavaScript框架! 全局安装:D npm install -g deprecated.js因为毕竟您为什么不安装LIBRARY ...在全球范围内? :D 请在所有可能的计算机上执行此操作! 如果可以的话,请在AWS中租用更...
  • 安装oracle等需要用到的包,xorg-x11-deprecated-libs-6.8.2-31.i386.rpm
  • 2019.11.9更新: 由于当初作者开发时能力有限,导致工具本身存在着重重和问题矛盾等多重矛盾。目前有很多其他的优秀工具提供了对shiro检测/利用更好的支持(如更好的回显支持,更有效的小工具与直接支持内存外壳等)...
  • OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. Error occurred during initialization of VM Initial heap size ...
  • 用以下代码做实验 import time import cv2 as cv import glob import argparse import sys import numpy as np import os.path from collections import deque from sklearn.utils.linear_assignment_ import linear...
  • 用 @Deprecated注解的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择,本文给大家介绍java @deprecated注解的作用及传递性,对本文感兴趣的朋友一起学习吧
  • 已弃用,支持raf 。 动画帧 基于requestAnimationFrame的简单 Promise 包装器。 这个库打算承诺 requestAnimationFrame。 用法 QanimationFrame是一个函数,它接受一个函数并返回一个包含它的返回值的承诺(在一帧...
  • 已从React Native中弃用并删除的模块的集合 此存储库中的模块已被弃用,并已... import MapView from 'deprecated-react-native-ios-mapview'; // Existing code using the deprecated MapView still works <MapVie
  • 请在 获得最新版本 请勿商用 yiban-auto-checkin SUST晨午检自动打卡 1.2.7不能正常使用,请更新到1.2.8
  • 本篇文章是对Function eregi() is deprecated错误的解决方法进行了详细的分析介绍,需要的朋友参考下
  • 主要介绍了java 中@Deprecated 注解的实例详解的相关资料,这里对@Deprecated注解进行了详细介绍,希望能帮助到大家,需要的朋友可以参考下
  • __DEPRECATED__-源码

    2021-05-25 11:17:14
    已淘汰 该存储库已弃用!
  • ProgressDialogDemo 等待提示框
  • deprecated-2.0.1.gem

    2014-02-16 22:05:33
    deprecated-2.0.1.gem 下载
  • 语言:English 扫描页面以查找不推荐使用的UI5控件。 此扩展名用于扫描页面中不推荐使用的控件。 此小扩展名对于在升级SAP UI5版本时快速识别不推荐使用的控件非常有用。
  • react-typescript, [DEPRECATED] 包装,使反应与打字效果很好 这是一个实验,你应该检查类型的反应,然后再做相应的反应。为了使它能很好地发挥打字机的作用,反应了封装。如果有人愿意,我将只接受commonjs的模块和...
  • PHP 类文档系统。 您可以添加带有类的项目及其带有参数的函数。 您还可以提供说明和示例。
  • xorg-x11-deprecated-libs-6.8.2-37.FC4.49.2.1.x86_64.rpm
  • ITMS-90809: Deprecated API Usage – Apple will stop accepting submissions of new apps that use UIWebView APIs starting from April 2020. See ...
  • 我们都知道 Java 有一个java.lang.Deprecated注解,用来将一个 API 标记为“废弃”,或者说“不建议使用”。比如 String 类就有一个被标记为 Deprecated的构造函数: @Deprecated public String(byte ascii[], int ...

    我们都知道 Java 有一个java.lang.Deprecated注解,用来将一个 API 标记为“废弃”,或者说“不建议使用”。比如 String 类就有一个被标记为 Deprecated的构造函数:

    @Deprecated
    public String(byte ascii[], int hibyte) {
        this(ascii, hibyte, 0, ascii.length);
    }
    

    Java 还提供了一个 @deprecated 的文档标签,用于提供相关信息。

    这个注解存在几个缺陷:

    • 无法禁止使用废弃的 API,单单一个编译警告不可能阻止划水程序员;
    • 无法提供足够的信息,为什么这个 API 被废弃了?需要用哪个 API 代替?毕竟文档注释不是强制性的。

    对于这个问题,Kotlin 的解决方案是 kotlin.Deprecated 注解,它比 java.lang.Deprecated更强大、更人性化。

    kotlin.Deprecated的声明如下:

    @Target(CLASS, FUNCTION, PROPERTY, ANNOTATION_CLASS, CONSTRUCTOR, PROPERTY_SETTER, PROPERTY_GETTER, TYPEALIAS)
    @MustBeDocumented
    public annotation class Deprecated(
        val message: String,
        val replaceWith: ReplaceWith = ReplaceWith(""),
        val level: DeprecationLevel = DeprecationLevel.WARNING
    )
    
    • @Target 表示 Deprecated可以用在类、函数、属性、注解类、构造函数、getter、setter 和类型别名上;
    • @MustBeDocument表示Deprecated是个公开的 API,必需包含在 API 文档里。

    我们重点看三个参数:

    第一个参数很简单,String 类型的 message,需要在这里说明废弃的原因。

    @Deprecated("this function is deprecated!")
    fun oldAdd(a: Int, b: Int) {
        println(a + b)
    }
    
    fun main(args: Array<String>) {
        oldAdd(1, 2)
    }
    

    比如我们定义了上面的函数 oldAdd,用 Deprecated 标注一下,如果调用这个函数,就会出现编译警告:

    Warning:(7, 5) Kotlin: ‘oldAdd(Int, Int): Unit’ is deprecated. this function is deprecated!

    我们定义 Deprecated 时给的 this function is deprecated! 出现在了警告信息里,让我们排查问题方便不少。

    第三个参数是DeprecationLevel这个枚举里定义的三个废弃级别之一,在使用了 Deprecated API 的地方给出不同级别的警告 :

    public enum class DeprecationLevel {
        WARNING,
        ERROR,
        HIDDEN
    }
    
    • WARNING:默认选项,编译依然会成功,但会出现编译警告;
    • ERROR:编译错误,相当于禁止使用这个 API;
    • HIDDEN:隐藏,无法调用这个 API。

    我们把上面的代码改一下,加上自定义的废弃级别:

    @Deprecated(
        "this function is deprecated!",
        ReplaceWith(""), // 无法省略
        level = DeprecationLevel.ERROR
    )
    fun oldAdd(a: Int, b: Int) {
        println(a + b)
    }
    

    再编译就会出现编译错误,编译直接失败:

    Error:(11, 5) Kotlin: Using ‘oldAdd(Int, Int): Unit’ is an error. this function is deprecated!

    如果换成HIDDEN

    Error:(11, 5) Kotlin: Unresolved reference: oldAdd

    找不到这个函数了……

    最后是第二个参数,需要是 ReplaceWith 类型,它是一个注解类型(因为注解的参数只能是基本类型、String 和注解类型)。声明如下:

    @Target()
    @Retention(BINARY)
    @MustBeDocumented
    public annotation class ReplaceWith(val expression: String, vararg val imports: String)
    
    
    • expression 是要替换成的代码段,智能替换参数;
    • imports 是需要额外 import 的依赖。

    定义一个函数newAdd,放进new包里:

    package new
    
    fun newAdd(a: Int, b:Int) {
        println("$a + $b = ${a + b}")
    }
    

    然后修改一下oldAdd 函数:

    @Deprecated(
        "this function is deprecated!",
        ReplaceWith("newAdd(a, b)", "new.newAdd")
    )
    fun oldAdd(a: Int, b: Int) {
        println(a + b)
    }
    

    这样,我们在 IDEA 里就可以按 Alt + Enter 一键替换:
    在这里插入图片描述
    替换时会自动匹配参数,并导入 imports 中定义的依赖:
    在这里插入图片描述

    原文链接:https://zhuanlan.zhihu.com/p/32890550

    展开全文
  • deprecated 我偶尔会遇到一种情况,我需要引入新的API或构造以供其他人试用,但是我知道在使用某些API后,它可能会根据其他人的反馈而改变。 在这种情况下,我想以某种方式注释该构造,以警告其他开发人员此新添加...

    deprecated

    我偶尔会遇到一种情况,我需要引入新的API或构造以供其他人试用,但是我知道在使用某些API后,它可能会根据其他人的反馈而改变。 在这种情况下,我想以某种方式注释该构造,以警告其他开发人员此新添加的构造的暂定性。 在这些情况下,我考虑了几种选择。

    第三方注释

    Guava的@Beta注释的Javadoc文档指出:

    表示在将来的发行版中,公共API(公共类,方法或字段)可能会发生不兼容的更改,甚至被删除。 带有此注释的API不受其包含库所作的任何兼容性保证。 请注意,此批注的存在并不表示所讨论的API的质量或性能,仅表示它不是“冻结的” API。

    @Beta用法的这种解释似乎意味着这非常适合于可能被删除的“新”结构。 我在博客文章“ 两个普遍有用的番石榴注释 ”中讨论了更多有关此注释的内容。

    使用第三方库的批注时的其他注意事项是,第三方库必须包含在一个人的类路径中,并且在最流行的Java IDE中通常不提供现成的支持以表示对该结构的特殊处理带有注释的注释。

    自定义注释

    如果由于其他任何原因未将库与批注一起使用,则在编写自己的自定义批注相对简单时,仅为批注添加新的库依赖项似乎有点繁重。 之前,我已经写过有关编写自定义@Unfinished批注的文章,该帖子讨论了如何在NetBeans 8.0.2和IntelliJ IDEA 14.0.3中为该自定义批注创建相应的自定义IDE检查。

    以下代码清单提供了一个可用于此目的的自定义注释的示例。

    @预览注释

    package dustin.examples.annotations;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Preview
    {
       /**
        * Anticipated release in which Preview status will no longer apply.
        *
        * @return Anticipated release of feature
        */
       String transition() default "";
    
       /**
        * Version in which this preview feature was introduced.
        *
        * @return Release in which this preview feature was introduced.
        */
       String since() default "";
    
       /**
        * Reasons this construct is considered "preview."
        *
        * @return Reasons this construct is considered preview.
        */
       String[] reasons() default {};
    }

    自定义注释在流行的Java IDE中缺少任何现成的支持。

    仅评论

    不一定需要使用批注,简单的注释(Javadoc或其他方式)可以解释特定的构造是初步的,可能会消失。 但是,就沟通意图而言,注释在许多方面都比注释弱。 使用IDE或其他工具解析注释比处理注释要困难得多。

    @Deprecated批注和@deprecated Javadoc标记

    可以使用@Deprecated来使用标准注释来注释不赞成使用的构造,IDE,工具和脚本可以轻松地对其进行处理。 不幸的是, @Deprecated注释从未得到我希望得到的全部支持,因为我希望它能更明确地说明为什么在决定让JDK 9增强@Deprecated变得不那么雄心勃勃时为什么不赞成使用某些东西。 Javadoc @deprecated标记可用于记录该弃用实际上是针对可能会消失但也可能不会消失的“新”构造的。 如果决定保留“预览”结构,则可以删除@Deprecated批注和@deprecated Javadoc标记。

    尽管@Deprecated批注和@deprecated Javadoc标记从包括内置IDE支持和大多数Java开发人员意识的标准中受益,但是使用它们标记可能会消失的新结构仍然有些不合适。可能会停留在周围。 文档“ 如何以及何时不推荐使用API ”的“ 何时不推荐使用 ”部分指出:“在设计API时,请仔细考虑它是否会取代旧的API。” 它进一步列出了弃用的三个原因,即“不安全,有错误或效率低下”,“在将来的版本中消失”和“鼓励不良的编码习惯”。

    我并不是唯一认为“过时”标记可能会被删除或不应使用的内容的人。 NicolasFränkel概述了Java中功能生命周期,并解释说Java中的弃用是“对每个人的大胆而明确的声明,至少在当前形式下,功能版本没有未来。”

    Alex Buckley在jdk-dev邮件列表消息“ JEP 12:处理支持预览功能的标准API ”中写道:

    我们想使用“弃用弃用”作为标记“此API与预览功能紧密相连”的方式。 如果预览功能成为永久功能,则将删除弃用项。 从终端弃用到没有弃用的转变是新颖的,但并不疯狂—弃用具有多种含义,并且其在JDK中的历史用法对于任何事情都不是很好的指导。

    Buckley还引用了JEP 277 (“增强的弃用”)中有关弃用机制的使用的一段内容(我强调了Buckley强调的相同部分):

    弃用是一种用于传达有关API生命周期的信息的技术:鼓励应用程序从API迁移过来,阻止应用程序形成对API的新依赖关系,并告知开发人员继续依赖API的风险

    JDK 9引入的 “增强型” @Deprecated注释可以通过其新添加的“ since ”和“ forRemoval ”元素在这种情况下有所帮助(Buckley称之为“出生时弃用弃用”)。 指定@Deprecated注释的forRemoval()false ,并指定其since为同一版本的Javadoc @since标记可以帮助开发者看到,构造从一开始弃用目前尚无计划将其删除。 为了使这种方法最有效,可能会写成将forRemoval明确声明为false,而不是依赖于其隐式默认值。

    可能我们的Java开发人员将需要开始考虑@Deprecated@deprecated与过去有所不同。 尽管@Deprecated批注和@deprecated Javadoc标记仍“通知”我们对已注释/描述的结构的“持续依赖的风险”,但认为这样的结构将来必定会消失是不正确的。 如果我们习惯了已弃用的JDK构造中的这种替代含义,那么我们将更有可能考虑将相同的方法与我们自己新近添加但仍具有试验性的功能一起使用。

    翻译自: https://www.javacodegeeks.com/2018/03/forward-looking-with-javas-deprecated.html

    deprecated

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,021
精华内容 65,208
关键字:

deprecated