在Java中弃用包的最简单方法是什么?

问题描述 投票:29回答:6

我正在研究新的代码库并将系统迁移到新的框架。

我想弃用许多软件包,只是为了让其他开发人员明白这个软件包中的所有东西都不应该用于新的开发。

指示整个包已被弃用的最佳方法是什么?

java package deprecated
6个回答
12
投票

你自己说过:你想要弃用包内的所有内容,而不是包本身。该包只是一个命名空间,并且弃用命名空间会有不同的含义 - 比如不再使用此命名空间。就像不向该命名空间添加任何新项目一样。

在您的情况下,我建议您弃用不应再使用的每个类的每个公共方法(和字段)。这在现代IDE中变得可见,并且开发人员在想要使用旧类和方法时会被警告。您可以查看代码并逐步重构它以消除这些类和方法的依赖关系。


44
投票

我最近必须这样做并使用package-info.java文件来弃用包。

http://www.intertech.com/Blog/whats-package-info-java-for/

仅使用包声明将package-info.java文件添加到包中:

/**
 * @deprecated As of release 2.0, replaced by {@link com.acme.new.package}
 */
@Deprecated
package com.acme.old.package;

在Eclipse中,用户从此包导入类的所有位置都将使用弃用警告下划线。


7
投票

使用AspectJ。创建一个在使用包时发出编译器警告的Aspect:

public aspect DeprecationAspect{

    declare warning :
        call(* foo.bar..*(..)) : "Package foo.bar is deprecated";

}

(如果使用antmaven,可以轻松地将AspectJ添加到构建中)


2
投票

您可以使用Package annotation创建@Deprecated并弃用任何包:)


2
投票

对于后来来的人...... 我的解决方案与IDEA“路径替换”

要查找的文本:(public | protected)+(\ s)(abstract)(\ s)(静态)(\ s)(final)(\ s)*(class | interface | enum | Enum) 替换为:@Deprecated \ n \ $ 1 \ $ 3 \ $ 5 \ $ 7 \ $ 9 选项:(选择)正则表达式 目录:{Choose dir}


0
投票

正如@muymoo之前提到的,你可以使用package-info.java文件。但你所能做的就是在文件的JavaDoc中添加一个@deprecated警告:

/**
 * @deprecated This package is deprecated, use {@link my.new.pkg} instead.
 */
package my.old.pkg;

JavaDoc真的是你唯一的选择,你不能使用“适当的”代码内注释来@Deprecate

@Deprecated
package my.old.pkg;

将导致Java 8中的编译错误

$ java -version
java version "1.8.0_191"

$ javac package-info.java
package-info.java:6: error: modifier deprecated not allowed here

这里唯一真实,干净的选择是真正弃用包中的所有类。如果你考虑一下这是有意义的,因为Java中的包只不过是命名空间。

© www.soinside.com 2019 - 2024. All rights reserved.