例如假设我们有类A,B,C,d,E是否有可能创建一个只能由两个类访问的静态变量?
现在A有一个公共静态int变量
我想这个变量只有在A和B类是可见的,不在C,D,E。
是否有可能做到这一点,而不使变量受到保护并使用继承?
例如假设我们有类A,B,C,d,E是否有可能创建一个只能由两个类访问的静态变量?
现在A有一个公共静态int变量
我想这个变量只有在A和B类是可见的,不在C,D,E。
是否有可能做到这一点,而不使变量受到保护并使用继承?
你必须有一个静态的getter。在那个getter里面,你可以抛出一个Exception,捕获它,检查调用者,然后授予访问权限或抛出拒绝访问异常。
除此之外,答案在于继承和其他众所周知的OO解决方案。
这听起来像一个非常臭,黑客的方式来实现这一点。做**不**推荐。 – 2012-01-14 22:52:37
我不赞成这个答案,但至少使用Thread.currentThread()。getStackTrace()'而不是抛出异常。 – 2012-01-14 22:53:11
我也没有。但是,为什么你会首先违背一个'public static'变量的*定义?整个问题听起来很腥。 – 2012-01-14 22:53:47
将类A和B放入它们自己的包中,并给出字段默认(包)可见性。 (不要给它一个public
,protected
或private
说明符)。
如果您不使用任何可见性修饰符,则该成员将具有包级别可见性,并且您可以将A和B放入同一个包中,并将C,D,E放入不同的包中。
然而,有一个明确的code smell这里...
+1。 – 2012-01-14 22:58:39
你可以做的是抛出A和B在一个单独的包,并把这些变量只对包的会员可见。要做到这一点,你只需要放弃可见性关键字(例如public或protected)。 Java中变量的默认可见性是包。
aVar和bVar是公共和静态的,但只能从A和B类(和AB)访问。
`
public class AB
{
private static class A
{
public static int aVar ;
}
private static class B
{
public static int bVar ;
}
}
`
不,这是公开的。 – 2012-01-14 22:50:12
你想通过这样做达到什么目的? – 2012-01-14 22:53:25