2

我的问题是:

  • 我有一堆不同的类都扩展了一个基类(Identifiable)。
  • 我需要为某些子类分配一个特定的值(securityLevel),该值应该是可变的并分配给该类的所有成员(即:它应该是static)。
  • 我需要通过共同祖先访问这些类。
  • 我该怎么做呢?

首先想到的是有一个专用的interface( ISecurity) 定义值或静态方法来访问它们,并让实际的类要么不访问implements它,如果它们这样做,覆盖static字段(或检索它的方法)。然而,这是不可能的,原因有两个:

  1. 当前的 Java 语言不允许sstatic中的成员interface
  2. 即使它允许它也不可能@Override

我怎样才能解决这个问题?我找到的唯一方法是:

  • 将非static成员 ( public Class getValueProvider()) 添加到基类以检索返回的值null
  • 在感兴趣的类@Override中,非static方法返回所需值的private static Class getValueProvider()实现 setter 和 getter 的值。
  • 使用检索到的class实例来获取请求的值(如果返回为空,则跳过所有内容)。

这非常难看,并且无法在子类中强制执行正确的实现。

4

3 回答 3

0

您可以定义Identifiableabstract class. 此外,您可以定义另一个abstract class扩展Identifiable并遵守您的限制的方法,即持有 thestatic variable和任何可能需要的方法。

于 2013-07-27T13:58:13.870 回答
0

我会尽量避免任何静态成员。java中的静态成员总是很笨拙(你不能覆盖只是隐藏它们等)

我不确定我是否理解您的问题,但我建议您使用上下文接口或其他东西构造对象。如果对象允许返回一个值或必须返回一个特殊值,那么这些对象就不能访问这些上下文接口。

创建所有这些对象的人可以传递相同的对象,从而控制行为。然后可以将该对象保持为静态(如单例)

于 2013-07-27T14:00:34.557 回答
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();
        }
    }
于 2013-07-27T14:11:11.530 回答