java中的类或方法别名

时间:2010-02-05 00:02:10

标签: java

我有很长的java类和方法名

LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();

我想将其别名 g.m();在另一个班级 可以这样做吗?

8 个答案:

答案 0 :(得分:39)

没有

将其包装在您更喜欢的名称的方法中。

答案 1 :(得分:25)

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

import DamnLongPackageNameThatIDontLikeTyping;

class MyCoolClass()
{
    DamnLongClassNameThatIDontLikeTyping dlc=new DamnLongClassNameThatIDontLikeTyping();
    dlc.this();
    dlc.that();
    dlc.tOther();
    dlc.damnLongAnnoyingMethodNameStillHasToBeTypedEveryTime();
}

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

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


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


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

class MyCoolClass()
{
    DLC<ctrl-space>

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

import DamnLongPackageNameThatIDontLikeTyping;

class MyCoolClass()
{
    DamnLongClassNameThatIDontLikeTyping<your cursor here>

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

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

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

再也不要输入长方法名称。

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

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

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

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

DLC<ctrl-space>.dLM<ctrl-space>将被DamnLongClass.damnLongMethod()的调用取代,它甚至会在9次击键中包含你的parens。

答案 2 :(得分:20)

Java语言不提供别名机制。

但是,您可以通过以下某种方式缓解您的“痛苦”:

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

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

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

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

但让我们退后一步:

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

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

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

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

答案 3 :(得分:14)

实际上, 是获得你所追求的1/2的一种方式。

看看你的例子:

LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();

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

您可以使用Java's static import feature'别名'或将<{1}}的静态方法导入到您自己的类名称空间中。而不是上面的代码,你只需写这个:

LONGGGGGGGGGGGGGGGClass

答案 4 :(得分:10)

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

class g extends LONGCLASS 
{ 
   void a() { super.loooonnng(); }
}

class g
{
   private LONGCLASS lc;
   void a() { lc.loooonnng(); }
}

答案 5 :(得分:1)

Java不支持。

有一个enhancement ticket (7166917)用于添加导入别名,这会有所帮助。这个想法是这样的:

import a.very.lng.pckage.* as shortpckg
import my.pckage.IsAVeryLongClassName as MyShort

答案 6 :(得分:0)

public class Shorten
{

    public static final Shorten m = new Shorten();

    public int a(params)
    {
        return some_method_with_long_name(params);
    }

    public void b()
    { 
        // whatever static code you want
    }
}

在您的主要代码中:

import static mypackage.Shorten.m;
...
int res = m.a(params);
m.b();
...

通过这种方式,您可以有效地为所需的静态内容添加别名,同时避免出现警告。

答案 7 :(得分:0)

我只运行了一个简单的测试,但是定义了一个内部类变量。我不是专家,也不知道这样做的后果,但是我获得了积极的结果。

package a.b;

public class Library {
    public static String str;
}

现在编写一个类以访问库中的静态变量

package a.b;

public class Access {
   public class Short extends Library {}
   Short.str;
}