布尔类型转换系统(Java)

时间:2013-12-02 12:23:58

标签: java javascript php templates

我正在考虑灵活模板系统的类型转换系统。我需要将任何对象类型映射到有意义的布尔值,以便于灵活性和可用性。

有许多事情要考虑,我们喜欢工作系统,因此我们首先考虑现有的解决方案。

在PHP中,例如以下的布尔转换系统存在:

如果不是,则考虑事物(布尔值):

  • false(布尔)
  • 0(整数,长整数,短整数,字节,BigInteger)
  • 0.0(浮动)
  • “”(String)
  • 空数组
  • 空集合或地图

现在问题是这个好系统吗?其他系统使用的其他规则是什么?这个有什么缺点?

我目前也在考虑这个系统:

一切都是假的,除了:

  • true(boolean)
  • 1(数字)
  • “true”(String)
  • not null(Object)
  • 非空数组或集合或地图

这也很容易。

[更新]

为您提供更多信息。模板系统是用Java开发的,与Web组件有关。它具有像OGNL这样的脚本语言,它具有其他功能,如调用方法,访问环境提供的特殊功能,如可插入的辅助方法和宏)。

它使用自定义类型转换系统,只是将结果从一种类型(Class)转换为另一种类型(Class)。因此,它为每个允许的类型转换形成一个简单的二维矩阵。可以将多个转换器添加到单个组合中,但不能保证使用哪个转换器。

今天我想到了布局类似于布局类的替代方案。我自己使用了几种脚本语言,我想知道存在哪些不同的方法,每种方法在可读性,表达性和简单性方面的优缺点是什么。

[/更新]

3 个答案:

答案 0 :(得分:0)

根据我的理解,我希望这会对你有所帮助。

没有错。这只取决于你的要求。

  1. 在某些情况下,-1是由指定项目所在的对象返回的 不在收集清单中。
  2. 任何编程语言如何遵循一些标准,这些标准仍然从低位开始 等级语言,如汇编级别。
  3. 因为在执行/编译期间所有更高级别的语言都转换为机器级语言。在这种情况下,现有系统将在转换高级代码时降低一些复杂性。
  4. 我推荐的解决方案

    在您的情况下,您可以使用条件运算符,例如

    <强> 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)开始:

  • 0表示false:嗯,大多数indexOf方法(集合,字符串,...)返回-1表示“未找到”,而零表示有效值。这同样适用于InputStream.read
  • 0.0(float)表示错误:这几乎从不有用。对于真正缺席的值有NaN,而零经常是有效的结果,并且没有理由让它比+4.9E-324更特殊。
  • “”(String)表示false:查看BufferedReader.readLine:读取文本文件时,空String是有效值。 null标志着文件结束。
  • 空数组,空集合或地图:与下一项冲突
  • 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旨在与没有这种自动转换功能的语言一起使用。