我正在考虑灵活模板系统的类型转换系统。我需要将任何对象类型映射到有意义的布尔值,以便于灵活性和可用性。
有许多事情要考虑,我们喜欢工作系统,因此我们首先考虑现有的解决方案。
在PHP中,例如以下的布尔转换系统存在:
如果不是,则考虑事物(布尔值):
现在问题是这个好系统吗?其他系统使用的其他规则是什么?这个有什么缺点?
我目前也在考虑这个系统:
一切都是假的,除了:
这也很容易。
[更新]
为您提供更多信息。模板系统是用Java开发的,与Web组件有关。它具有像OGNL这样的脚本语言,它具有其他功能,如调用方法,访问环境提供的特殊功能,如可插入的辅助方法和宏)。
它使用自定义类型转换系统,只是将结果从一种类型(Class)转换为另一种类型(Class)。因此,它为每个允许的类型转换形成一个简单的二维矩阵。可以将多个转换器添加到单个组合中,但不能保证使用哪个转换器。
今天我想到了布局类似于布局类的替代方案。我自己使用了几种脚本语言,我想知道存在哪些不同的方法,每种方法在可读性,表达性和简单性方面的优缺点是什么。
[/更新]
答案 0 :(得分:0)
根据我的理解,我希望这会对你有所帮助。
没有错。这只取决于你的要求。
我推荐的解决方案
在您的情况下,您可以使用条件运算符,例如
<强> PHP 强>
1. $is_tested = ($tested=="Completed") ? TRUE : FALSE;
2. $is_tested = ($tested=="TRUE") ? TRUE : FALSE;
<强> JAVA 强>
1. boolean is_tested = (tested=="Completed") ? TRUE : FALSE;
2. boolean is_tested = (tested=="TRUE") ? TRUE : FALSE;
答案 1 :(得分:0)
抱歉,我对java知之甚少。
在IBM WEB-Sphere中, PHP和Java之间的类型转换
即使我建议您引用IBM WEB-SPHERE进行类型转换。 这是link
我希望这可以帮助你并提供更多想法。
答案 2 :(得分:0)
自动转换为布尔值可以看作是“特殊值意味着失败”成语的变体。这是非常容易出错的,因为不同的操作使用不同的值来达到这个目的,因为有效返回值的范围不同。设计一种只考虑一个用例的编程语言总是很危险的......
让我们先从你的第一个例子(php)开始:
indexOf
方法(集合,字符串,...)返回-1
表示“未找到”,而零表示有效值。这同样适用于InputStream.read
NaN
,而零经常是有效的结果,并且没有理由让它比+4.9E-324
更特殊。BufferedReader.readLine
:读取文本文件时,空String
是有效值。 null
标志着文件结束。Collection
s和String
s特殊而不是对象,那么它可能很有用但是在使用子类时更改规则并不是一个好主意。当然,在某些情况下null
是有效值,您必须查看异常或特殊错误变量。关于你的考虑:
一切都是假的,除了:
- true(boolean)
- 1(数字)
- “true”(String)
- not null(Object)
- 非空数组或集合或地图
您是否知道任何Java API,其中只有一个是成功的指标,而其他每个值都是失败的?看起来根本没有用这个规则。 "true"
字符串几乎相似。除了系统属性之外,没有人返回String
"true"
,其中他只能返回布尔值true
。不要谈论案例敏感性问题或问题,为什么不接受“是”等等。它与您之后考虑的非null
规则冲突。如果我在应用自动布尔转换之前将String
转换为Object
,会有所不同吗?数组/集合规则具有相同的歧义。
可能存在一些语言,其中精心选择的自动转换与该语言的库同步产生令人信服的结果。但我从未见过一个。支持这种转换的所有语言都存在陷阱或“不使用时...”规则。如果你想将 Java 绑定到你的脚本语言,它甚至不太可能有一个超过错误风险的好处。 Java API旨在与没有这种自动转换功能的语言一起使用。