java - 当类名称冲突时导入包而不是类?

标签 java java-8 dependencies

我正在开发一个应用程序,其中有两种类型,称为 Assets ,来自不同的包。我知道我可以在类型前面加上包的路径,但是它们都非常长,并且都需要作为参数传递给方法,这看起来很糟糕。 我的两门课是:

really.long.path.to.this.one.package.Asset

Ridiculusly.long.path.to.this.otherPackage.Asset

由于这两种类型都在参数中使用并作为返回类型,所以我最终会遇到这种情况:

import really.long.path.to.this.one.package.Asset;

private List<Ridiculusly.long.path.to.this.otherPackage.Asset> getSimilarAssets(Ridiculusly.long.path.to.this.otherPackage.Asset asset,String otherParam){...}

当参数列表中包含未导入的 Assets 类型时,某些方法看起来更糟。

这两种类型都超出了我的控制范围,我无法用其中一种来交换其他任何类型。

我知道我无法以正常方式导入这两个类(这已在其他地方得到解答),但是我可以以某种方式导入一个父包,以便我可以只编写部分路径吗? 在我看来,如果我可以导入某个包,它是 Asset 之一的父包。的,我可以大大减少方法定义中的路径。上面的方法可能看起来像:

private List<otherPackage.Asset>getSimilarAssets(otherPackage.Asset asset, String otherParam){...}

我认为这会起作用,因为这两个类的父包不同,但我似乎无法在我的类中获得对该包的工作引用。有什么方法可以做到这一点吗?

最佳答案

理想情况下,您需要类似 C++ 的 typedefusing 关键字的东西。遗憾的是 Java 不支持这一点。

您能做的最好的事情 - 但这确实会侵入性地改变您的程序源代码 - 是考虑定义两个您自己的 Asset 类,每个类都是单独的(但更短) ) 路径,或者使用不同的名称:

class Asset extends Ridiculusly.long.path.to.this.otherPackage.Asset
{
    /*constructors calling super*/
}

并实例化这些版本的Asset,而不是具有长名称的版本。在实现这一点时,您在导入中不会遇到任何歧义。但是您将承受必须写出构造函数 stub 的开销,因此这可能不可行。

但是,我会这样做吗?答案是不。原因是我认为最好使用您选择用于实现的语言,而不是反对。在采用这种方法之前,请特别考虑本文。 http://www.ibm.com/developerworks/library/j-jtp02216/

关于java - 当类名称冲突时导入包而不是类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39391780/

相关文章:

java - 这里的 Optional<Class> 有什么问题?

java - 推迟 thenApplyAsync 执行

java - 发现太多项目时如何在 Java Stream 中指定谓词

dependencies - 通过gradle将依赖关系jar和主要 Artifactory 一起发布到 Artifactory

java - 如何在MongoDB JAVA中向对象追加数据并在一页上显示其内容?

java - 突围游戏: Part of the stones constructor isn't updating

java - 如何动态添加 JLabels 到 JPanel?

java - 如何修复丢失的 WebSocket ServerContainer,以使用 CometD、Jetty 和 Spring 启用 WebSocket?

java - 是否可以禁用 javac 的静态最终变量内联?

android - 找不到 com.squareup.picasso :picasso:2. 5.2