繁体   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