Java 采用模块化实现方式的继电器开关

Java 采用模块化实现方式的继电器开关,java,Java,我有两个字符串s1,s2。它们可以有任何类型的数据int、float、list、map等,需要根据类型进行比较。 字符串可以是1,2,1,2,3,{1=1,2=2}等等,我们还将知道字符串所属的数据类型 目前,我已经编写了一个switch语句 switch(datatype) { case A: case B: default: } 但是,我需要转换成模块化的方式,并在类型消除开关和if-else的基础上调用相应的函数 如何将字符串动态转换为特定的数据类型并进行相应的

我有两个字符串s1,s2。它们可以有任何类型的数据int、float、list、map等,需要根据类型进行比较。 字符串可以是1,2,1,2,3,{1=1,2=2}等等,我们还将知道字符串所属的数据类型

目前,我已经编写了一个switch语句

switch(datatype)
{  
   case A: 
   case B:
   default: 
}
但是,我需要转换成模块化的方式,并在类型消除开关和if-else的基础上调用相应的函数


如何将字符串动态转换为特定的数据类型并进行相应的调用?或者通过开关或其他任何方式消除。

如果我理解正确,您将数据存储为字符串,但它们可以表示不同类型的数据。现在,您希望以依赖于类型的方式对它们进行比较,但您不喜欢交换机解决方案,因为它要求所有比较逻辑都在同一个方法中

我看到两种可能的解决办法

首先,如果数据类型属于您控制下的自定义类,则可以向其添加比较方法:

abstract boolean compare(String a, String b); // or whetever return type you need
然后需要在所有子类中实现。那么你可以称之为:

result = datatype.compare(a, b)
请注意,如果数据类型是枚举,也可以这样做

其次,如果您的数据类型不是受控的自定义类,则可以使用映射:

Map<DataType, ComparisonFunction> comparisonFunctions = ...;

第二个解决方案的属性是可以在运行时更改映射。这是优点还是缺点取决于您的具体要求。

请提供您拥有的确切数据,包括其结构和示例输出。字符串的内容在解析时,可以说是非类型的,因此在某一点上,即使只是把它分配给一个类,你也必须有一些条件逻辑。你可以通过使用try-catch来避免使用开关。示例:尝试{/*解析Int*/*使用Int*/}catchNumberFormatException{/*不是Int*/}执行操作,但这将比使用else或switch慢得多,而且看起来很糟糕!
ComparisonFunction function = comparisonFunctions.get(datatype);
if (function == null) {
    throw new IllegalArgumentException("Unknown datatype: " + datatype);
}
result = function.apply(a, b);