Подтвердить что ты не робот

Класс или псевдоним метода в java

У меня есть длинные имена классов и классов java

LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();

Я хочу, чтобы он g.m(); в другом классе это можно сделать?

4b9b3361

Ответ 1

Нет.

Оберните его в метод с именем, которое вам больше нравится.

Ответ 2

Во-первых, вы редко должны вводить имя класса. У вас может быть что-то вроде этого:

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 нажатиях клавиш.

Ответ 3

Язык Java не предоставляет никакого механизма псевдонимов.

Однако, вы можете немного облегчить свою "боль" некоторой комбинацией следующего:

  • Для статических методов вы можете использовать статический импорт, чтобы избежать длинного имени класса.

  • Вы можете объявить свой собственный класс удобства с коротким именем и короткими именами методов и реализовать статические методы для делегирования реальным методам, например:

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

  • Для обычных методов вы можете реализовать класс Wrapper или подкласс с более удобными именами методов. Тем не менее, обе стороны имеют недостатки в обслуживании и (в зависимости от вашей JVM) перспективы производительности.

Но отпустите шаг назад:

  • Если реальная проблема заключается в том, что вам просто надоело печатать длинные имена, решение - использовать современную среду IDE, которая поддерживает завершение имен по мере их ввода. См. Например, ответ @BillK.

  • Если реальная проблема заключается в том, что вам надоели длинные имена, занимающие много места, решение должно использовать более широкий экран/более длинные строки. Большинство мониторов достаточно велики, чтобы отображать 120-значный (или более) широкий исходный код без напряжения глаз.

  • Если ни один из вышеперечисленных вопросов не является ответом, рассмотрите возможность рефакторинга кода нарушения для использования разумных (то есть более коротких) классов и имен методов. Еще раз, современная IDE может быстро и безопасно обрабатывать такой рефакторинг.

В последнем пункте я бы подумал, что слишком длинные имена классов и имена методов - это плохой стиль. IMO, вам оправдано время, чтобы исправить их самостоятельно или предположить, что они исправлены, особенно если они представляют собой "общедоступный" API для некоторой библиотеки или модуля.

Ответ 4

На самом деле есть способ получить 1/2 того, что вы после.

Глядя на ваш пример:

LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();

Похоже, что longggggggggggggggggggggggggMethod является статическим. (Если бы это было не так, вы бы префикс его с именем переменной, которым вы управляете размером.)

Вы можете использовать функцию статического импорта Java в 'alias' или импортировать статические методы в LONGGGGGGGGGGGGGGGClass в пространство имен вашего собственного класса. Вместо приведенного выше кода вам нужно было бы написать это:

longggggggggggggggggggggggggMethod();

Ответ 5

Вы можете использовать наследование или инкапсуляцию для переноса исходного класса.

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

или

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

Ответ 6

Не поддерживается в Java.

Есть билет улучшения (7166917) для добавления псевдонимов для импорта, который был бы полезен. Идея заключается в следующем:

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

Ответ 7

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();
...

Таким образом вы эффективно используете любой статический материал, который хотите, избегая при этом предупреждений.

Ответ 8

Я только провел простой тест, но я определил переменную внутреннего класса. Я не эксперт, и я не знаю последствий этого, но я получил положительные результаты.

package a.b;

public class Library {
    public static String str;
}

Теперь напишите класс для доступа к статическим переменным из библиотеки.

package a.b;

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