псевдоним класса или метода в Java - PullRequest
41 голосов
/ 05 февраля 2010

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

LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();

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

Ответы [ 7 ]

39 голосов
/ 05 февраля 2010

номер

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

25 голосов
/ 05 февраля 2010

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

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

20 голосов
/ 05 февраля 2010

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

Тем не менее, вы могли бы немного ослабить свою «боль» с помощью некоторой комбинации следующего:

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

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

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

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

Но давайте вернемся назад:

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

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

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

В последнем пункте я бы посчитал, что слишком длинные имена классов и методов имеют вид bad style . ИМО, вы вправе потратить время на их самостоятельное исправление или предложить исправление, особенно если они представляют собой «публичный» API для некоторой библиотеки или модуля.

14 голосов
/ 05 февраля 2010

На самом деле - это способ получить половину того, что вам нужно.

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

LONGGGGGGGGGGGGGGGClass.longggggggggggggggggggggggggMethod();

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

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

longggggggggggggggggggggggggMethod();
10 голосов
/ 05 февраля 2010

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

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

или

class g
{
   private LONGCLASS lc;
   void a() { lc.loooonnng(); }
}
1 голос
/ 09 августа 2018

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

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

import a.very.lng.pckage.* as shortpckg
import my.pckage.IsAVeryLongClassName as MyShort
0 голосов
/ 24 января 2016
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();
...

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

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