【问题标题】:modifiers for multiple objects in javajava中多个对象的修饰符
【发布时间】:2023-03-31 23:18:01
【问题描述】:

在java中可以做这样的事情吗?

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

谢谢!

编辑:对不起,我在我的例子中犯了一个错误..我不需要只有字符串..

【问题讨论】:

  • 你想创建一个字符串数组吗?
  • 那种看起来像一个静态初始化器...那种
  • 类似什么?该代码块应该代表什么?
  • @mdm,不,我不认为他试图这样做。注意他的块(不是类型)是如何声明为静态的、公共的和最终的。

标签: java modifier


【解决方案1】:

语法错误。但你可以这样做:

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

或者,更接近您的版本(空白在 Java 中无关紧要):

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

作为参考,这里是来自Java Language Specificationofficial grammar for Field Declarations

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

如您所见(从我的 cmets 中),您可以使用通用修饰符声明多个相同类型的字段,但不能混合类型。

【讨论】:

  • 有效,但前提是变量都具有相同的类型。而且很丑。
  • @marzapower 我知道,但问题是一个人是否可以做到这一点,而不是一个人是否应该做到这一点:-)
  • +1 不清楚代码 IMO 来初始化这样的变量;但如上所述,问题是是否有可能。
  • 对不起,我没有很好地解释我的例子,现在我编辑了它
【解决方案2】:

你的意思是喜欢吗?

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

在您的代码中,您可以使用静态导入。

import static Constants.*;

System.out.println(A);

【讨论】:

    【解决方案3】:

    不,不是。
    通常,首选 IDE 中的智能自动完成功能会有所帮助。 例如。在 netbeans 中,"Psfs" + tab 扩展为 public static final String

    【讨论】:

      【解决方案4】:

      没有。目前没有任何 Java 版本允许您这样做。

      即使它真的很有用,我承认。

      【讨论】:

      • 但不能使用这种语法,因为这对于静态初始化程序块会非常混乱:static { ... }
      • 显然。我的意思是,定义一组(大)共享相同修饰符的变量真的很有用......即使结构略有不同。
      【解决方案5】:

      您可以声明一个静态块并在该静态块中创建变量:

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

      但是一旦离开该静态块的范围,您将无法引用abc

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

      在 main 中,a 无法解析为变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多