如何控制Java类中字段的可见性?
如何对任何类的成员进行差异控制访问?假设我有三门课:-如何控制Java类中字段的可见性?,java,oop,Java,Oop,如何对任何类的成员进行差异控制访问?假设我有三门课:- Class A { int a; int b; } Class B { Access to only 'a' and not 'b' } Class C { Access to only 'b' and not 'a' } 一种方法是使用面向方面的编程。您可以检查以查看正在访问的包或类,并禁止访问 AspectJ可用于强制执行持久层中的类不会在web层中访问,而只能从服务层访问。下面是一个例子: 接口时间: interface IHa
Class A
{
int a;
int b;
}
Class B
{
Access to only 'a' and not 'b'
}
Class C
{
Access to only 'b' and not 'a'
}
一种方法是使用面向方面的编程。您可以检查以查看正在访问的包或类,并禁止访问 AspectJ可用于强制执行持久层中的类不会在web层中访问,而只能从服务层访问。下面是一个例子: 接口时间:
interface IHaveA { int a {get;set;} }
interface IHaveB { int b {get;set;} }
Class A : IHaveA, IHaveB
{
public int a {get;set;}
public int b {get; set;}
}
Class B
{
IHaveA _iHaveA;
C(IHaveA iHaveA)
{
_iHaveA = iHaveA;
}
}
Class C
{
IHaveB _iHaveB;
C(IHaveB iHaveB)
{
_iHaveB = iHaveB;
}
}
然后新的B和C如下所示:
static Main()
{
A a = new A();
B b = new B(a);
C c = new C(a);
}
这是一个非常粗糙的想法
class A
{
int a;
int b;
void getAObserver(B bInstance);
void getBObserver(C cInstance);
}
实现这一点的一种非常粗糙的方法是
Class A {
private int a ;
private int b ;
public int getA( Object obj) throws userDefinedIllegalAccessException {
//check if obj isInstance of B
// If yes return a
// else throw userDefinedIllegalAccessException
}
public int getB( Object obj) throws userDefinedIllegalAccessException {
//check if obj isInstance of c
// If yes return b
// else throw userDefinedIllegalAccessException
}
}
class B {
public void checkAccessValue() {
try{
A objA = new A() ;
System.out.println(objA.getA(this) ;
System.out.println(objA.getB(this) ;
}
catch(userDefinedIllegalAccessException udException){
}
}
}
class C {
public void checkAccessValue() {
try{
A objA = new A() ;
System.out.println(objA.getA(this) ;
System.out.println(objA.getB(this) ;
}
catch(userDefinedIllegalAccessException udException){
}
}
}
你从未听说过:受保护、私有和公共?@BookOfZeus:他将如何使用访问说明符实现差异访问?我相信在任何好的设计中都不需要这样的层次结构,但由于您的回答,我很想知道您如何使用访问说明符来实现这一点。我误解了这个问题,您是对的,我想同时在C#和Java中实现这一点。@Gurpret:为什么您同时用C#和Java编写?你也没有回答我的第一个问题:为什么?在这个设计中,如果B类也有“IHaveB”\u IHaveB”,那么B类可以同时访问“a”和“B”。它不能被很强的控制吗?@gurpreetsigh也许你应该解释一下,如果B类需要IHaveB,那么你为什么不想让它访问B?!!!听起来很奇怪!对于C#,PostSharp有类似的方面可以控制可见性,请参阅以获取组件内部、内部实现和内部的示例。如果这些不适合你的需要,你可以写一个适合你的。