2012-01-14 27 views
0

例如假设我们有类A,B,C,d,E是否有可能创建一个只能由两个类访问的静态变量?

现在A有一个公共静态int变量

我想这个变量只有在A和B类是可见的,不在C,D,E。

是否有可能做到这一点,而不使变量受到保护并使用继承?

+1

不,这是公开的。 – 2012-01-14 22:50:12

+1

你想通过这样做达到什么目的? – 2012-01-14 22:53:25

回答

0

你必须有一个静态的getter。在那个getter里面,你可以抛出一个Exception,捕获它,检查调用者,然后授予访问权限或抛出拒绝访问异常。

除此之外,答案在于继承和其他众所周知的OO解决方案。

+1

这听起来像一个非常臭,黑客的方式来实现这一点。做**不**推荐。 – 2012-01-14 22:52:37

+2

我不赞成这个答案,但至少使用Thread.currentThread()。getStackTrace()'而不是抛出异常。 – 2012-01-14 22:53:11

+0

我也没有。但是,为什么你会首先违背一个'public static'变量的*定义?整个问题听起来很腥。 – 2012-01-14 22:53:47

0

这是不可能的。如果B类只是A类,你可以使用内部类。

+0

这是可能的。真正的问题是气味是否值得 – emory 2012-01-15 02:27:31

3

将类A和B放入它们自己的包中,并给出字段默认(包)可见性。 (不要给它一个publicprotectedprivate说明符)。

3

如果您不使用任何可见性修饰符,则该成员将具有包级别可见性,并且您可以将A和B放入同一个包中,并将C,D,E放入不同的包中。

然而,有一个明确的code smell这里...

+0

+1。 – 2012-01-14 22:58:39

0

你可以做的是抛出A和B在一个单独的包,并把这些变量只对包的会员可见。要做到这一点,你只需要放弃可见性关键字(例如public或protected)。 Java中变量的默认可见性是包。

0

aVar和bVar是公共和静态的,但只能从A和B类(和AB)访问。

`

public class AB 
{ 
      private static class A 
      { 
         public static int aVar ; 
      } 


      private static class B 
      { 
         public static int bVar ; 
      } 
} 

`

相关问题