我有很长的java类和方法名
LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();
我想将其别名
g.m();
在另一个班级
可以这样做吗?
答案 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;
}