gpt4 book ai didi

java - Java中命名对象的最佳实践

转载 作者:行者123 更新时间:2023-11-30 08:57:28 25 4
gpt4 key购买 nike

我需要为 java 中的对象子集取一个唯一的名称。基本上我有一个显示对象和它的多个实例。显示的每个实例都需要有一个唯一的名称以用于审计目的。这样当您查看审核时,您就会知道审核了哪些显示。我正在寻找的是如何将此作为可能使用设计模式的最佳实践。以下是我目前的一些想法

想法 1使用 toString() 每个对象都已经有一个 toString 因此重写它应该提供一种简单的方法来命名对象。不利的一面是所有对象都有一个 toString,因此很难强制 Display 对象填充它们,而其他所有对象都不需要它。

想法 2使用接口(interface)。我可以创建一个名为 IDisplayName 的接口(interface),其中包含一个名为 getName() 的函数。我的 Display 对象可以实现此接口(interface),因此我的具体类将需要设置它。这是我目前已经实现的。

想法 3与 IDEA 2 相同,但 getName() 返回一个 ENUM 而不是 String。这样我也许可以在单个文件中强制执行唯一性,并且 ENUM 将具有 displayString 属性。这个问题是有很多显示对象> 100,所以它可以非常快地变得非常大。

想法 4只需记录类名。这不能很好地工作,因为程序员不会阅读审计,所以我更愿意让审计更友好。

在此先感谢您的帮助。

最佳答案

我不会使用 toString,因为它可能有其他用途(如调试)或打印对象状态。如果非程序员不清楚返回类名,那么程序员可能也不清楚。我的意思是,如果您使用简洁代码原则,您的类名应该对每个人都清楚。然后,您当然必须通过仅显示简化的类名来删除包:String simplifiedClassName = qualifiedClassName.substring(qualifiedClassName.lastIndexOf(".") + 1).

如果你想更灵活,你的IDisplayName.getName可以这样定义:

default String getName() {
String qualifiedName = getClass().toString();
return qualifiedName.substring(qualifiedName.lastIndexOf(".") + 1);
}

它是一个接口(interface)默认方法,这意味着程序员只能在他们认为必须的类中覆盖它。

另一种可能性,如果您需要国际化/本地化:您的 getName 可以从属性文件中读取名称,其中属性key 是简化的类名。非程序员也可以编辑属性文件,100 个条目的属性文件并不大。保证属性文件中值的唯一性也很容易。

针对 Java 7 的编辑:除了 IDisplayName 接口(interface)之外,创建一个名为 DisplayNameUtil 的类,其中 getName是一个静态方法:

public static String getName(Object obj) {
String qualifiedName = obj.getClass().toString();
return qualifiedName.substring(qualifiedName.lastIndexOf(".") + 1);
}

然后,在您的大多数显示类(或公共(public)父类(super class))中,您可以添加:

@Override
public String getName() {
return DisplayNameUtil.getName(this);
}

程序员仍然能够返回选定类的特定名称,如果需要,接口(interface) getName 仍然可以访问属性文件。

拥有一个为接口(interface)方法提供默认行为的 Util 类是Java 7 模式。顺便说一句,建议删除伴随的 Util 类从 Java 7 迁移到 Java 8 时进行重构。换句话说,如果您的代码曾经被翻译成 Java 8 很容易重构它以使用默认值接口(interface)中的方法并删除 Util 类。

关于java - Java中命名对象的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28159842/

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