我正在开发一个应用程序,我有两种名为Asset的类型,来自不同的包。我知道我可以在包的路径前面添加类型,但它们都非常长,并且它们都需要作为参数传递给方法,这看起来很糟糕。 我拥有的两个班级是:
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){...}
,当非嵌入式Asset-type在参数列表中时,某些方法看起来更糟。
这两种类型都不受我的控制,我无法用其他任何方式交换。
我知道我不能以正常的方式导入这两个类(这已在其他地方得到解答),但是我可以以某种方式导入一个父级包,这样我就可以只写一部分路径了吗?
在我看来,如果我可以导入一些作为Asset
之一的父类的包,我可以在方法定义中减少相当多的路径。上面的方法可能看起来像:
private List<otherPackage.Asset>getSimilarAssets(otherPackage.Asset asset, String otherParam){...}
我认为这可行,因为2个类的父包是不同的,但我似乎无法将包的工作引用到我的类中。任何方式都可以这样做?
答案 0 :(得分:1)
理想情况下,您需要的内容更像是C ++的typedef
或using
关键字。可悲的是,Java并不支持这一点。
您可以做的最好 - 但这会侵入您的程序源代码 - 考虑定义两个自己的 Asset
类,每个类都在不同的(但更短的)路径中,或者,或者使用不同的名称:
class Asset extends Ridiculusly.long.path.to.this.otherPackage.Asset
{
/*constructors calling super*/
}
并实例化Asset
的这些版本,而不是具有长名称的版本。在实现这一点时,您不会在import
中遇到任何歧义。但是你必须承担编写构造函数存根的开销,因此这可能是不可行的。
但是,我会这样做吗?答案是不。原因是我认为最好使用 而不是使 使用您选择用于实现的语言。在采用这种方法之前,请特别考虑本文。 http://www.ibm.com/developerworks/library/j-jtp02216/
答案 1 :(得分:0)
您可以获得的最好的方法是导入一个类(使用更多的类)并将FQN用于另一个类。如果您正在使用其软件包中的其他类,则您也需要单独导入它们。
没有办法创造&#34;部分进口&#34;像你一样希望。很高兴它只是一个眼睛,而不是一个复杂的设计问题,阻碍你继续发展。