java – 用基本类型验证多个instanceof的最佳方法是什么(例如:s
我在这里搜索了答案,我发现的每一个帖子实际上都是我所寻求的“片段”.
我想找到比这更好的方法: ?编辑:哎呀!我的意思是首先使用原始的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注释:这是接口方法的实现.此方法将根据实现接受不同的类型,因此我不想使用不同的参数类型创建三个不同的方法. 在这个例子中,这是一个只接受数字而不接受任何其他内容的文本框,因此它只能由一个String(由正则表达式^ [0-9] * $验证),long和int表示. 我也喜欢它 – 也许,最终 – 接受更像POJO的自定义(和简单)DTO,但如果这种特殊性使其他一切变得复杂,我会考虑其他因素,所以不要太担心这个一. 正如我所说,这个接口的不同实现可以接受完全不同的类型. *我显然没有想要一种方法来切换整数,长整数和字符串(它不能被切换,但直到Java7),我想切换instanceofs * 看了之后 > java: boolean instanceOf Boolean? 我的实现显然有效,但我觉得有更好的方法. 感谢您的时间. 编辑:使用原始类型和Autoboxing 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有点真…… 解决方法
您可以做的一件事是将基元包装在一个接口中,这样实现此接口的任何值类型都可以作为值传递.
public interface ValueInterface { processValue(); } 那么set value方法看起来像: public void setValue(ValueInterface value) { value.processValue(); } 现在,您将工作委托给知道如何对自己采取行动的实际对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |