gpt4 book ai didi

java - 使用原始类型验证多个 instanceof 的最佳方法是什么(例如 : switch case)?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:28 28 4
gpt4 key购买 nike

我在这里搜索了答案,我找到的每条线索实际上都是我所寻求的“片段”。

我想找到比这更好的方法:

~ 编辑:糟糕!本来打算用原始的Wrapper类,但是当时调用方法的时候想着用原始类型~感谢您的关注:)

@Override
public void setValue(Object value) {

if (value instanceof String) {

} else if (value instanceof Integer) { // and not 'int'

} else if (value instanceof Long) { // and not 'long'

}
}

// The usage that made me confused in the first place :
int i = 42;
setValue(i);

注意@Override 注释:这是一个接口(interface)方法的实现。此方法会根据实现接受不同的类型,因此我不想使用不同的参数类型创建三个不同的方法。

在这个例子中,这是一个只接受数字的文本框,所以它只能由一个字符串表示(由正则表达式 ^[0-9]*$), 一个 long 和一个 int。

我也希望它——也许,最终——接受更像 POJO 的自定义(和简单的)DTO,但如果这种特殊性使其他一切变得复杂,我还有其他想法,所以不要担心关于这个。

正如我所说,此接口(interface)的不同实现可以接受完全不同的类型。

* 我显然不是在问一种转换 Integers、Longs 和 String 的方法(它们还不能转换。直到 Java7 才开始),我想转换 instanceofs *

看完之后

我的实现显然有效,但我只是觉得有更好的方法。我想知道是否有比我所做的更清洁的方法,您有什么建议以及为什么?

感谢您的宝贵时间。此致,多米尼克·布里塞特。

编辑:原始类型和自动装箱的用法

public static void main(String[] args) {
int i = 42;

System.out.println(autoboxing(i));
}

public static boolean autoboxing(Object o) {
return o instanceof Integer;
}

输出 true 因为最后,myInt instanceof Integer 是 true ..!

最佳答案

你可以做的一件事是将你的原语包装在一个接口(interface)中,这样任何实现这个接口(interface)的值类型都可以作为一个值传递。

public interface ValueInterface {
processValue();
}

然后设置值的方法看起来像:

public void setValue(ValueInterface value) {
value.processValue();
}

现在您将工作委托(delegate)给知道如何对自身采取行动的实际对象。

关于java - 使用原始类型验证多个 instanceof 的最佳方法是什么(例如 : switch case)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6597127/

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