gpt4 book ai didi

接口(interface)中的 Java 静态方法/字段(再次!)

转载 作者:行者123 更新时间:2023-11-29 09:00:14 25 4
gpt4 key购买 nike

我的问题是:

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

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

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

我如何编写代码来解决这个问题?我找到的唯一方法是:

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

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

最佳答案

您可以尝试服务/工厂类型的实现。或者有某种存储安全性的类对象 (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();
}
}

关于接口(interface)中的 Java 静态方法/字段(再次!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com