簡體   English   中英

我如何在整個Java包中使用一些變量?

[英]How do I have some variables can be used in the whole package of Java?

我將需要一些變量,例如類型標識符,類型聲明和這兩種類型都是表達式類型。 在Identifier類型下,我想要一些變量,例如:ide,binder。 它們應該具有類型標識符,並且在類型聲明下,我希望:第一,第二,它們應該具有類型聲明。 我怎樣做才能使以后引用這些變量而又不使類脫離實例呢? 謝謝

所以我首先創建一個類Expression:

public abstract class Expression{   
}

我有類標識符:

public class Identifier extends Expression{
}

最后我有課聲明:

public class Declaration extends Expression{
}

簡單的答案是將變量聲明為“靜態”,而沒有“ public”或“ protected”或“ private”訪問修飾符,而將變量保留為package-private或“ default”訪問權限:

package com.yourdomain.whatever;
public class Identifier extends Expression {
  static Ide ide;
  static Binder binder;
  ...
}

缺少訪問修飾符意味着同一包中的其他類型都可以訪問變量,但包外部不能訪問。

但是這個想法有兩個不好的地方:你直接暴露變量,而你正在使用'靜態'變量,這些變量本質上是全局變量,因此非常討厭。

您可以通過將變量聲明為“公共”或“受保護”來更廣泛地訪問變量,但這只會使事情變得更糟。

所以我問為什么要直接訪問這些變量,為什么不實例化該類呢? 這些似乎都不是來自這里的好主意。

一種選擇是使這些變量成為staticfinal ,從而有效地使它們成為常量:

public class Identifier extends Expression {
    public static final String ide = "IntelliJ";
    public static final String binder = "binder";

    // ...
}

現在,可以使用類名稱直接訪問這些變量:

String myIde = Identifier.ide;

要創建全局變量,請將其設置為publicstatic 使其公開,以便可以在包中的任何位置訪問變量。 將其設置為靜態使其免於必須創建類的實例來訪問變量。 例如,

public class Identifier extends Expression{
    public static int globalVar;
    //...
}

然后,通過調用Identifier.globalVar ,可以在其他類的包中的任何其他位置訪問它。

編輯:我應該注意,訪問標識符public使得變量可以在Java程序中的任何地方訪問,無論它是在包內還是在包外。 protected訪問標識符使它可以在類,包和子類中訪問。 如果您希望變量只能在同一個包中訪問,而不能在子類或包外的任何地方訪問,那么正確的選擇是沒有訪問標識符。 但是,如果沒有關系,那么討論的三個選擇中的任何一個都足夠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM