我的问题是:
Identifiable
)。securityLevel
),该值应该是可更改的并分配给该类的所有成员(即:它应该是{ {1}})。首先想到的是让一个专用的static
(interface
)定义值或静态方法来访问它们,让实际的类不要{{1}它,如果有的话,覆盖ISecurity
字段(或检索它的方法)。
然而,由于两个原因,这是不可能的:
implements
中的static
成员。static
它。我如何解决问题? 我发现的唯一方法是:
interface
成员(@Override
)以检索返回static
的值。public Class getValueProvider()
中,非null
方法返回实现所需值的@Override
实现setter和getter的值。static
实例获取请求的值(如果返回值为null,则跳过所有内容)。这非常难看,并且没有办法在子类中强制执行正确的实现。
答案 0 :(得分:0)
您可以将Identifiable
定义为abstract class
。此外,您可以定义另一个扩展abstract class
的{{1}}并遵守您的限制,即保留Identifiable
以及可能需要的任何方法。
答案 1 :(得分:0)
我会尽量避免任何静态成员。 java中的静态成员总是很吵(你不能覆盖只是隐藏它们等等)
我不确定我是否理解您的问题,但我建议您使用上下文界面或其他东西构建对象。然后,如果对象允许返回值或必须返回特殊值,则对象可以访问这些上下文接口。
创建所有这些对象的对象可以传递相同的对象,从而控制行为。然后,该对象可以保持静态(如singelton)
答案 2 :(得分:0)
您可以尝试服务/工厂类型的实施。或者使用某种类对象来存储安全性(SecuritySettings
)并在当前Identifiable
对象中发送以获得安全级别
public class Identifiable { }
public class SampleUser extends Identifiable { }
public class ExampleUser extends Identifiable { }
public class UserService
{
public int SampleUserSecurity = 0;
//Or an array/dictionary structure
public int GetSecurityLevel(Identifiable user)
{
if(user instanceof SampleUser)
{
return SampleUserSecurity;
}
}
public SampleUser CreateSampleUser()
{
return new SampleUser();
}
public ExampleUser CreateExampleUser()
{
return new ExampleUser();
}
}