У меня есть длинные имена классов и классов java
LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();
Я хочу, чтобы он
g.m();
в другом классе
это можно сделать?
У меня есть длинные имена классов и классов java
LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();
Я хочу, чтобы он
g.m();
в другом классе
это можно сделать?
Нет.
Оберните его в метод с именем, которое вам больше нравится.
Во-первых, вы редко должны вводить имя класса. У вас может быть что-то вроде этого:
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 нажатиях клавиш.
Язык Java не предоставляет никакого механизма псевдонимов.
Однако, вы можете немного облегчить свою "боль" некоторой комбинацией следующего:
Для статических методов вы можете использовать статический импорт, чтобы избежать длинного имени класса.
Вы можете объявить свой собственный класс удобства с коротким именем и короткими именами методов и реализовать статические методы для делегирования реальным методам, например:
public static void shortName (...) { VeryLongClassName.veryLongMethodName(...); }
Для обычных методов вы можете реализовать класс Wrapper или подкласс с более удобными именами методов. Тем не менее, обе стороны имеют недостатки в обслуживании и (в зависимости от вашей JVM) перспективы производительности.
Но отпустите шаг назад:
Если реальная проблема заключается в том, что вам просто надоело печатать длинные имена, решение - использовать современную среду IDE, которая поддерживает завершение имен по мере их ввода. См. Например, ответ @BillK.
Если реальная проблема заключается в том, что вам надоели длинные имена, занимающие много места, решение должно использовать более широкий экран/более длинные строки. Большинство мониторов достаточно велики, чтобы отображать 120-значный (или более) широкий исходный код без напряжения глаз.
Если ни один из вышеперечисленных вопросов не является ответом, рассмотрите возможность рефакторинга кода нарушения для использования разумных (то есть более коротких) классов и имен методов. Еще раз, современная IDE может быстро и безопасно обрабатывать такой рефакторинг.
В последнем пункте я бы подумал, что слишком длинные имена классов и имена методов - это плохой стиль. IMO, вам оправдано время, чтобы исправить их самостоятельно или предположить, что они исправлены, особенно если они представляют собой "общедоступный" API для некоторой библиотеки или модуля.
На самом деле есть способ получить 1/2 того, что вы после.
Глядя на ваш пример:
LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();
Похоже, что longggggggggggggggggggggggggMethod
является статическим. (Если бы это было не так, вы бы префикс его с именем переменной, которым вы управляете размером.)
Вы можете использовать функцию статического импорта Java в 'alias' или импортировать статические методы в LONGGGGGGGGGGGGGGGClass
в пространство имен вашего собственного класса. Вместо приведенного выше кода вам нужно было бы написать это:
longggggggggggggggggggggggggMethod();
Вы можете использовать наследование или инкапсуляцию для переноса исходного класса.
class g extends LONGCLASS
{
void a() { super.loooonnng(); }
}
или
class g
{
private LONGCLASS lc;
void a() { lc.loooonnng(); }
}
Не поддерживается в Java.
Есть билет улучшения (7166917) для добавления псевдонимов для импорта, который был бы полезен. Идея заключается в следующем:
import a.very.lng.pckage.* as shortpckg
import my.pckage.IsAVeryLongClassName as MyShort
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();
...
Таким образом вы эффективно используете любой статический материал, который хотите, избегая при этом предупреждений.
Я только провел простой тест, но я определил переменную внутреннего класса. Я не эксперт, и я не знаю последствий этого, но я получил положительные результаты.
package a.b;
public class Library {
public static String str;
}
Теперь напишите класс для доступа к статическим переменным из библиотеки.
package a.b;
public class Access {
public class Short extends Library {}
Short.str;
}