модификаторы для нескольких объектов в java

можно что-то подобное в java сделать?

static public final {
    String A = "a...";
    int B = 3;
    boolean C = true;
}

Благодарность!

РЕДАКТИРОВАТЬ: извините, я допустил ошибку в своем примере .. Мне не нужны только строки ..


person frx08    schedule 09.06.2011    source источник
comment
Вы пытаетесь создать массив строк?   -  person mdm    schedule 09.06.2011
comment
что-то вроде статического инициализатора ... вроде   -  person mre    schedule 09.06.2011
comment
Что-то вроде чего? Что должен представлять этот блок кода?   -  person Mike Yockey    schedule 09.06.2011
comment
@mdm, нет, я не думаю, что он пытается это сделать. Обратите внимание, как его блок (не тип) объявлен статическим, общедоступным и окончательным.   -  person Vineet Reynolds    schedule 09.06.2011


Ответы (5)


Неправильный синтаксис. Но сделать это можно так:

public static final String A = "a...", B = "b...", C = "c...";

Или, ближе к вашей версии (пробелы в Java неактуальны):

public static final String
   A = "a...",
   B = "b...",
   C = "c...";

Для справки, вот официальная грамматика для объявлений полей из спецификации языка Java:

FieldDeclaration:
    FieldModifiersopt Type VariableDeclarators ; # one variable type only

VariableDeclarators:
    VariableDeclarator
    VariableDeclarators , VariableDeclarator     # one or more variables

VariableDeclarator:
    VariableDeclaratorId
    VariableDeclaratorId = VariableInitializer

VariableDeclaratorId:
    Identifier
    VariableDeclaratorId [ ]

VariableInitializer:
    Expression
    ArrayInitializer

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

person Sean Patrick Floyd    schedule 09.06.2011
comment
Работает, но только если все переменные одного типа. И это некрасиво. - person Michael Borgwardt; 09.06.2011
comment
@marzapower Я знаю, но вопрос был в том, может ли это сделать, а не в том, должен ли это делать :-) - person Sean Patrick Floyd; 09.06.2011
comment
+1 это непонятный код IMO для инициализации таких переменных; но, как указано выше, вопрос был в том, возможно ли это. - person planetjones; 09.06.2011
comment
извините, но я не очень хорошо объяснил свой пример, теперь я его отредактировал - person frx08; 09.06.2011

Вы имеете в виду как?

public interface Constants {
    String A = "a...";
    String B = "b...";
    String C = "c...";
}

В вашем коде вы можете использовать статический импорт.

import static Constants.*;

System.out.println(A);
person Peter Lawrey    schedule 09.06.2011

Нет, это не так.
Обычно умное автозаполнение в предпочтительной среде IDE немного помогает. Например. в netbeans вкладка «Psfs» + расширяется до общедоступной статической конечной строки

person bbaja42    schedule 09.06.2011

Нет. На данный момент ни одна версия Java не позволяет вам это делать.

Признаюсь, даже если это было бы действительно полезно.

person marzapower    schedule 09.06.2011
comment
Но не с этим синтаксисом, потому что это очень сбивает с толку в отношении блоков статического инициализатора: static { ... }. - person Jesper; 09.06.2011
comment
Очевидно. Я имею в виду, что было бы действительно полезно определить (большую) группу переменных с одинаковыми модификаторами ... даже с немного другой структурой. - person marzapower; 09.06.2011

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

public class TestS {
    static {
        String  a = "a...";
        int     b = 3;
        boolean c = true;
    }

Но как только вы покинете область действия этого статического блока, вы не сможете ссылаться на a, b или c.

    public static void main(String[] args) {
        System.out.println(a); // won't compile
    }
}

В основном a не может быть преобразован в переменную.

person Atreys    schedule 09.06.2011