java中的类或方法别名

use*_*196 43 java

我有很长的java类和方法名

LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();
Run Code Online (Sandbox Code Playgroud)

我想将它别名为 g.m();另一个类可以这样做吗?

Tho*_*sen 40

没有.

用一个你喜欢的名字的方法包装它.

  • 比尔K,如果你必须使用这样的名字代码,而你不喜欢它们,那可能不是你控制的代码. (22认同)
  • 我会给这个+1,虽然我想注意,如果你经常调用一种方法来使这个值得,你可能需要一些重构. (4认同)
  • 这是我认为最好的答案。我理解其他人试图找到解决方法,但有些人认为线程启动者最初的愿望是无效的,我不同意这些。我觉得这个问题问得非常好,这里的答案也是最好的,因为这是最真诚的答案。 (2认同)

Bil*_*l K 25

首先,您应该很少输入类名.你可能有这样的事情:

import DamnLongPackageNameThatIDontLikeTyping;

class MyCoolClass()
{
    DamnLongClassNameThatIDontLikeTyping dlc=new DamnLongClassNameThatIDontLikeTyping();
    dlc.this();
    dlc.that();
    dlc.tOther();
    dlc.damnLongAnnoyingMethodNameStillHasToBeTypedEveryTime();
}
Run Code Online (Sandbox Code Playgroud)

好吧,所以这不是很好,但你不应该经常输入整个类名,就在你第一次声明时; 并且包导入使它不必DamnLongPackageNameThatIDontLikeTyping.DamnLongClassNameThatIDontLikeTyping每次都输入:

但是,输入可能很烦人.进入编辑器.如果您不使用Eclipse,Netbeans或IntelliJ,那么您现在需要立即停止阅读并安装它 - 加载您的项目.我会等....


认真.去实现它(梦想);去得到它(东西.如果没有它,其余部分将无济于事.


现在,真正巧妙的是,要获得我上面输入的内容,你只需这样做:

class MyCoolClass()
{
    DLC<ctrl-space>
Run Code Online (Sandbox Code Playgroud)

输入后,您的文件将如下所示:

import DamnLongPackageNameThatIDontLikeTyping;

class MyCoolClass()
{
    DamnLongClassNameThatIDontLikeTyping<your cursor here>
Run Code Online (Sandbox Code Playgroud)

请注意,你没有输入该死的任何东西,只是DLC它找出了你想要导入的类,为它添加了一个导入并将该类放在那里.(如果有多个匹配项,您可能必须从类列表中进行选择).

最重要的是,一旦你有一个名为dlc的对象被实例化,你可以输入:

dlc.<ctrl-space> 并获取该类中的方法列表.永远不会再输入一个方法名称.如果你班上有一些kagillion方法,不要滚动它们,输入:dlc.dLAM<ctrl-space>to getdlc.damnLongAnnoyingMethodNameStillHasToBeTypedEveryTime();

切勿再次键入长方法名称.

没有长的方法名,没有长的类名,没有长的包名.然而,您获得了极其可读的方法,包和类.这就是为什么java程序员倾向于使用这些长名称,我们也试图记住我们正在为下一个人编写代码,并且不希望他必须遍历我们的代码来试图弄清楚:

g.m();指的是 - 强迫他们记住在这个课程中它意味着GreatClass.motion,但在下一课程中它意味着Grey.modifyColor- 这将是非常残酷的.

静态类型的Java给编辑器带来了很多力量.它可以做你甚至无法用动态类型语言做的事情,你应该发挥你的语言的力量成为一个有效的程序员 - 而不是试图使每种语言适合你从使用另一种语言学到的某种风格.

请注意,这也适用于静态方法......

DLC<ctrl-space>.dLM<ctrl-space> 将被一个电话取代DamnLongClass.damnLongMethod(),它甚至会在9次击键中包括你的parens.

  • 你是对的.但**可读性**也是代码的品质因素.在我的例子中,我有很多自动生成的类 - 并且每个包都会发生一个`ObjectFactory`.当我现在从两个包中使用`ObjectFactory`时,我需要**用它们的包完全限定**.所以我到处都是`com.longCompanyName.longProjectName.carStorageProvider.ObjectFactory`.我如何渴望`导入com.longCompanyName.longProjectName.carStorageProvider.ObjectFactory作为CarFactory`.(这里不能给你完整的两个例子,因为我的评论空间用完了) (9认同)

Ste*_*n C 20

Java语言不提供别名机制.

但是,您可以通过以下某些组合来缓解您的"痛苦":

  • 对于静态方法,您可以使用静态导入来避免使用长类名.

  • 您可以使用短名称和简短方法名称声明自己的便利类,并实现静态方法以委托给真正的方法,例如:

    public static void shortName(...){VeryLongClassName.veryLongMethodName(...); }

  • 对于常规方法,您可以实现Wrapper类或具有更方便的方法名称的子类.但是,两者都有维护和(取决于您的JVM)性能方面的缺点.

但让我们退后一步:

  • 如果真正的问题是您只是厌倦了输入长名称,那么解决方案是使用支持在键入名称时完成名称的现代IDE.比如@ BillK的回答.

  • 如果真正的问题是您厌倦了长名称占用太多空间,解决方案是使用更宽的屏幕/更长的线条.大多数显示器足够大,可以显示120个字符(或更多)宽的源代码,没有眼睛疲劳.

  • 如果以上都不是答案,请考虑重构违规代码以使用合理(即更短)的类和方法名称.再一次,现代IDE可以快速安全地处理这种重构.

在最后一点,我会认为过长的类名和方法名是坏的风格.IMO,你有理由花时间自己修复它们,或建议修复它们,特别是如果它们构成某些库或模块的"公共"API.


Dre*_*lls 14

其实,有一个办法让你以后1/2.

看看你的例子:

LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();
Run Code Online (Sandbox Code Playgroud)

它似乎longggggggggggggggggggggggggMethod是静态的.(如果不是,你会在它前面添加一个变量名称,你可以控制它的大小.)

您可以使用Java的静态导入功能来"别名"或静态方法导入LONGGGGGGGGGGGGGGGClass到您自己的类的命名空间中.而不是上面的代码,你只需要写这个:

longggggggggggggggggggggggggMethod();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这不适用于Java 6之前的源代码 (2认同)

Eri*_* J. 10

您可以使用继承或封装来包装原始类.

class g extends LONGCLASS 
{ 
   void a() { super.loooonnng(); }
}
Run Code Online (Sandbox Code Playgroud)

要么

class g
{
   private LONGCLASS lc;
   void a() { lc.loooonnng(); }
}
Run Code Online (Sandbox Code Playgroud)


bvd*_*vdb 6

Java 中不支持。

有一个增强票证 (7166917),用于为导入添加别名,这会很有帮助。想法是这样的:

import a.very.lng.pckage.* as shortpckg
import my.pckage.IsAVeryLongClassName as MyShort
Run Code Online (Sandbox Code Playgroud)