- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很抱歉这个含糊的问题。我不确定我在这里寻找什么。
我有一个 Java 类,我们称它为 Bar
。在那个类中有一个实例变量,我们称它为foo
。 foo
是一个字符串。
foo
不能只有任何值。有一长串字符串,foo
一定是其中之一。
然后,对于列表中的每个字符串,我希望能够设置一些额外的条件,以判断特定的 foo
是否可以属于特定类型的 Bar
(取决于同一 Bar
中的其他实例变量)。
我应该在这里采取什么方法?显然,我可以将字符串列表放在某个静态类中,并在调用 setFoo(String s)
时检查 s 是否在该列表中。但这不允许我检查额外的条件 - 或者我需要将 foo
的每个值的所有逻辑放在同一方法中,这很快就会变得丑陋。
解决方案是为 foo
的每个可能值制作数百个类,并在每个类中插入相应的(通常是微不足道的)逻辑以确定它适合什么类型的 Bar
?这听起来也不对。
我应该采取什么方法?
这里有一个更具体的例子,可以更清楚地说明我在寻找什么。假设有一个 Furniture
类,它有一个变量 material
,它可以是很多东西,从桃花心木到胶合板。但是还有另一个变量,室内装潢
,您可以制作包含棉胶合板但不含橡木的家具;橡木而非胡桃木的缎面家具;其他类型的 Fabric 适合任何 Material ;等等。
最佳答案
我不建议为如此大的用例创建多个类/模板。这是非常基于意见的,但我会尽力回答。
在这种情况下,您的选择可能很多,并且您希望保持可维护的代码库,最好的解决方案是将值和逻辑分开。我建议您将 foo
值存储在数据库中。同时,保持你的客户端代码尽可能的干净和小。这样它就不需要过滤数据来找出哪些数据是有效的。 您想尽量减少代码中对数据的依赖。这样想:明天您可能需要将新 Material 添加到 Material 列表中。您要为此修改所有代码吗?或者您只想将它添加到您的数据库中,然后一切都神奇地工作?显然后者是更好的选择。下面是一个关于如何设计这样一个系统的例子。当然,这可能会根据您的用例或变量而有所不同,但这是一个很好的指导方针。基本的经验法则是:您的代码对数据的依赖性应该尽可能小。
假设您要创建一个 Bar
,它必须具有特定的 foo
。在这种情况下,我将为 BARS 创建一个数据库,其中包含所有可能的 Bar
。示例:
ID 名称 FOO1 门 1,4,10
我还将创建一个数据库 FOOS,其中包含每个 foo
的详细信息。例如:
ID 名称 PROPERTY1 PROPERTY2 ...1 橡木棕软
创建栏时:
酒吧门 = new Bar(Bar.DOOR);
在构造函数中,您将转到 BARS 表并查询 foo
。然后您将查询 FOOS 表并加载所有 Material 并将它们分配给新对象内的字段。
这样,每当您创建一个 Bar
时,都可以更改 Material 并从 DB 加载该 Material ,而无需更改任何代码。您可以添加尽可能多的 Bar
类型,并根据需要更改 Material 属性。然而,您的客户端代码并没有太大变化。
您可能会问为什么我们要为 FOOS 创建一个数据库并在 BARS 表中引用它的 ID?这样,您可以随意修改每个 foo
的属性。您也可以在 Bar
之间共享 foo
,反之亦然,但您只需要更改数据库一次。交叉引用变得轻而易举。我希望这个例子清楚地解释了这个想法。
关于Java 类 : limit instance variable to one of several possible values, 取决于其他实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47519550/
我正在尝试使用 flot 绘制 SQL 数据库中的数据图表,这是使用 php 收集的,然后使用 json 编码的。 目前看起来像: [{"month":"February","data":482},
我有一个来自 php 行的 json 结果,类似于 ["value"]["value"] 我尝试使用内爆函数,但得到的结果是“value”“value” |id_kategori|created_at
脚本 1 将记录 two 但浏览器仍会将 select 元素呈现为 One。该表单还将提交值 one。 脚本 2 将记录、呈现和提交 两个。我希望它们是同义词并做同样的事情。请解释它们为何不同,以及我
我的python字典结构是这样的: ips[host][ip] 每行 ips[host][ip] 看起来像这样: [host, ip, network, mask, broadcast, mac, g
在 C# 中 我正在关注的一本书对设置和获取属性提出了这样的建议: double pri_test; public double Test { get { return pri_test; }
您可能熟悉 enum 位掩码方案,例如: enum Flags { FLAG1 = 0x1, FLAG2 = 0x2, FLAG3 = 0x4, FLAG4 = 0x8
在一些地方我看到了(String)value。在一些地方value.toString() 这两者有什么区别,在什么情况下我需要使用哪一个。 new Long(value) 和 (Long)value
有没有什么时候 var result = !value ? null : value[0]; 不会等同于 var result = value ? value[0] : null; 最佳答案 在此处将
我正在使用扫描仪检测设备。目前,我的条形码的值为 2345345 A1。因此,当我扫描到记事本或文本编辑器时,输出将类似于 2345345 A1,这是正确的条形码值。 问题是: 当我第一次将条形码扫描
我正在读取 C# 中的资源文件并将其转换为 JSON 字符串格式。现在我想将该 JSON 字符串的值转换为键。 例子, [ { "key": "CreateAccount", "text":
我有以下问题: 我有一个数据框,最多可能有 600 万行左右。此数据框中的一列包含某些 ID。 ID NaN NaN D1 D1 D1 NaN D1 D1 NaN NaN NaN NaN D2 NaN
import java.util.*; import java.lang.*; class Main { public static void main (String[] args) thr
我目前正在开发我的应用程序,使其设计基于 Holo 主题。在全局范围内我想做的是工作,但我对文件夹 values、values-v11 和 values-v14. 所以我知道: values 的目标是
我遇到了一个非常奇怪的问题。 我的公司为我们的各种 Assets 使用集中式用户注册网络服务。我们一般通过HttpURLConnection使用请求方法GET向Web服务发送请求,通过qs设置参数。这
查询: UPDATE nominees SET votes = ( SELECT votes FROM nominees WHERE ID =1 ) +1 错误: You can't specify
如果我运行一段代码: obj = {}; obj['number'] = 1; obj['expressionS'] = 'Sin(0.5 * c1)'; obj['c
我正在为我的应用创建一个带有 Twitter 帐户的登录页面。当我构建我的项目时会发生上述错误。 values/strings.xml @dimen/abc_text_size_medium
我在搜索引擎中使用以下 View : CREATE VIEW msr_joined_view AS SELECT table1.id AS msr_id, table1.msr_number, tab
为什么验证会返回此错误。如何解决? ul#navigation li#navigation-3 a.current Value Error : background-position Too
我有一个数据名如下 import pandas as pd d = { 'Name' : ['James', 'John', 'Peter', 'Thomas', 'Jacob', 'Andr
我是一名优秀的程序员,十分优秀!