gpt4 book ai didi

java - 在Java中存储变量类型

转载 作者:行者123 更新时间:2023-11-30 04:52:50 26 4
gpt4 key购买 nike

我收到一堆字符串,我想检查每个字符串是否与指定类型匹配。

我可以这样做:

String[] strings = ...;
for(int i = 0; i < strings.length; i++) {
switch(i) {
case 0:
try {
Integer.parseInt(strings[i]);
} catch(Exception e) {
valid = false;
}
break;
case 1:
break;
...
}
}

但是由于添加新条件应该很容易,我想创建这样的东西

Type[] conditions = new Type[2];
conditions[0] = int;
conditions[1] = long;

然后检查整个字符串数组。

提前致谢!

最佳答案

我想这也许就是你所追求的?主代码循环遍历所有字符串,然后依次对该字符串运行每个可能的“检查”。 “check”代码本身存储在一个数组中,该数组包含具有单个 check(String) 方法的对象,该方法被内联覆盖。您可以让 check() 方法执行您需要的任何操作,只要它可以根据标准签名工作,因此如果您需要正则表达式检查或更复杂的操作,那么也可以正常工作。

public class TestTypes
{
public static void main(String[] args)
{
String[] strings = new String[] {"123", "9999999999999", "50.4", "not a number"};

for(String str : strings)
{
System.out.print("'" + str + "': ");
for( TypeChecker checker : typesToCheck)
{
if(checker.check(str))
{
System.out.print(checker.type.getSimpleName() + " ");
}
}
System.out.println();
}
}


static abstract class TypeChecker
{
public final Class type;
public abstract boolean check(String s);

TypeChecker(Class type)
{
this.type = type;
}
}

// A list of the code for all the checks
static TypeChecker[] typesToCheck =
{
new TypeChecker(Integer.TYPE) // is Integer
{
public boolean check(String s)
{
try{Integer.parseInt(s);}
catch(Exception e)
{return false;}
return true;
}
},

new TypeChecker(Long.TYPE) // is Long
{
public boolean check(String s)
{
try{Long.parseLong(s);}
catch(Exception e)
{return false;}
return true;
}
},

new TypeChecker(Double.TYPE) // is Double
{
public boolean check(String s)
{
try{Double.parseDouble(s);}
catch(Exception e)
{return false;}
return true;
}
},
};
}

这会产生输出:

'123': int long double 
'9999999999999': long double
'50.4': double
'not a number':

这个解决方案更加冗长,并且具有一定程度的间接性,这可能会使其变得困惑,所以如果您只有少量可能的类型,我会只需内联其中的很多即可,省去每个人的麻烦!

只有当您有需要在测试中运行的复杂算法,或者您需要能够自定义在运行时动态执行哪些测试时,这种方法才是真正的好方法。

关于java - 在Java中存储变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9497205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com