[英]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;
...
}
缺少访问修饰符意味着同一包中的其他类型都可以访问变量,但包外部不能访问。
但是这个想法有两个不好的地方:你直接暴露变量,而你正在使用'静态'变量,这些变量本质上是全局变量,因此非常讨厌。
您可以通过将变量声明为“公共”或“受保护”来更广泛地访问变量,但这只会使事情变得更糟。
所以我问为什么要直接访问这些变量,为什么不实例化该类呢? 这些似乎都不是来自这里的好主意。
一种选择是使这些变量成为static
和final
,从而有效地使它们成为常量:
public class Identifier extends Expression {
public static final String ide = "IntelliJ";
public static final String binder = "binder";
// ...
}
现在,可以使用类名称直接访问这些变量:
String myIde = Identifier.ide;
要创建全局变量,请将其设置为public
和static
。 使其公开,以便可以在包中的任何位置访问变量。 将其设置为静态使其免于必须创建类的实例来访问变量。 例如,
public class Identifier extends Expression{
public static int globalVar;
//...
}
然后,通过调用Identifier.globalVar
,可以在其他类的包中的任何其他位置访问它。
编辑:我应该注意,访问标识符public
使得变量可以在Java程序中的任何地方访问,无论它是在包内还是在包外。 protected
访问标识符使它可以在类,包和子类中访问。 如果您希望变量只能在同一个包中访问,而不能在子类或包外的任何地方访问,那么正确的选择是没有访问标识符。 但是,如果没有关系,那么讨论的三个选择中的任何一个都足够。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.