【问题标题】:Am I hardcoding?我是硬编码吗?
【发布时间】:2019-02-24 01:33:44
【问题描述】:

我是一名新的 CS 专业学生,我正在努力理解一些概念,尤其是硬编码。

如果我有如下程序,这是硬编码吗?

抱歉,如果我没有正确提出问题

public class Dictionary {
enum Book {
        Noun1("Book [noun] : A set of pages."),
        Noun2("Book [noun] : A written work published in printed or electronic form."),
        Verb1("Book [verb] : To arrange for someone to have a seat on a plane."),
        Verb2("Book [verb] : To arrange something on a particular date.");
        private String value;

        Book(String s) { this.value = s; }

        public String getValue() { return value; }
    }

public static void main(String[] args) {

    List<String> bookList = new ArrayList<String>();
    for (Book bookValues : Book.values()) {
        bookList.add(bookValues.getDefinition());

    Map<String, Object> dictionary = new HashMap<>();
    dictionary.put("book",bookList); 

    }

【问题讨论】:

  • 请注意,枚举并不是一个很好的用法。您的逻辑对于所有枚举都是相同的,因此它应该是某种字典。当您对每种情况有不同的逻辑时,应该使用枚举。

标签: java hardcoded


【解决方案1】:

硬编码是将数据封装在代码中。所以,是的,特别是在枚举中信息量相对较大的情况下,这将是合格的。

另一种方法是将数据存储在代码之外(例如,在文本文件中)并将该数据加载到您的代码中。

因此,在您的示例代码中,您可以将字典定义移动到文件中,然后在运行时加载它。然后数据将不再被硬编码。

【讨论】:

    【解决方案2】:

    让我们想基本上回答你的问题。想象一下,您在构建该代码后正在生成一个包;就像一个战争文件。

    关键问题是:“如果我需要更改我的变量之一的值,(例如;您的代码中的“书籍名词”句子),我是否需要重现我的包?”

    如果你真的需要每次都制作包;是的,你是硬编码。

    【讨论】:

      【解决方案3】:

      此代码的使用仅限于类中存在的数据。这是硬编码。

      【讨论】:

        【解决方案4】:

        如果您查看strict definition,您的代码中嵌入而不是存储在程序外部的任何数据都是硬编码的。因此,您可以证明您确实在进行硬编码,因为您的 enum 定义中有字符串。

        在我看来,就标准做法而言,enums 中的值和其他静态数据出现在您的代码中并非不合理。您应该使用常量来为常量数据赋予意义。例如,而不是:

        int rate = 60;
        

        使用:

        static final int CYCLES_PER_SECOND = 60;
        ...
        int rate = CYCLES_PER_SECOND;
        

        查看您的代码,我将不理会enum,但也许您需要解释dictionary 中的第一个键"book"

        【讨论】:

        • 另一方面,人们会做一些疯狂的事情,比如“int MILLISECONDS_IN_ONE_SECOND = 1000”。这太过分了。您可以将“以秒为单位的时间”乘以文字 1000,以将秒转换为毫秒。至少在国际标准单位决定他们更喜欢毫秒是 1/998 秒之前。像往常一样,这不是关于硬性规定的问题,而是关于什么是合理的。
        猜你喜欢
        • 1970-01-01
        • 2016-09-09
        • 1970-01-01
        • 2012-04-14
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 1970-01-01
        相关资源
        最近更新 更多