我正在开发一个应用程序,其中有两种类型,称为 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++ 的 typedef
或 using
关键字的东西。遗憾的是 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/