回答
这是交换机是如何构建到Java中的。但是,您可以执行的操作是在将它们放入开关之前将其作为int类型强制转换。
一个
switch
作品与byte
,short
,char
和int
基本数据类型。
无法切换long
的原因是没有必要。为了有意义地开启long
,您需要为要切换到的每个值添加一条case
语句。 (支持int
s的唯一原因是因为这是默认的整数类型;即使对于int
s它也相当浪费)。
以及为什么long不包含在这个列表中? – gstackoverflow
@gstackoverflow:我认为这不是一个有效的问题。 –
只被排除在所有原始list.it是奇怪的 – gstackoverflow
有时候,地图可以用作一种开关。例如:
Map<Long, Runnable> map = new HashMap<Long, Runnable>();
map.put(1L, new Runnable() { ... });
map.put(2L, new Runnable() { ... });
...
map.put(Long.MAX_VALUE, new Runnable() { ... });
map.get(someLongValue).run();
这不是'switch'语句。 – AJMansfield
我不明白你的想法 – gstackoverflow
我知道这不是'switch'。但它有时比if/then/else更好,因为它在[constant time](http://en.wikipedia.org/wiki/Time_complexity#Constant_time)中执行。 –
只是一个问题 – gstackoverflow
当然想了解downvote一个准确的答案! – ErstwhileIII
,因为你的回答没有帮助。你的回答不是回应我的问题。 – gstackoverflow
正如其他人所说,你不能在case语句中使用long(或String等)。如果你真的想用很长的时间,很明显的选择是使用if/then/else。
如:
if (someValue == 1L) {
println("one");
} else if (someValue == 2L) {
println("two");
} ...
} else if (someValue == 1000L) {
println("thousand");
}
但是,如果你有很多选择,因为你需要评估各种条件,这将表现非常糟糕。我是在暗示我在其他的答案是使用地图,而不是
Map<Long, Runnable> map = new HashMap<Long, Runnable>();
map.put(1L, new Runnable() {
public void run() { println("one"); }
});
map.put(2L, new Runnable() { ... });
...
map.put(1000L, new Runnable() { ... });
然后你就可以使用
map.get(someValue).run();
地图版本将在不断的时间为O执行(1),而如果/那么/ else将以线性时间O(N)执行。正如你所看到的,这个构造可以与Long,String或任何你喜欢的对象一起使用。
由于Long语言不允许在Java语言中使用switch语句,请告诉我们您正在尝试执行的操作,也许我们可以提供替代方法。 – ErstwhileIII
我正在创建一个基于long的开关构造,它在FFS中不断执行! –
您需要将您的“长”值转换为整数......是否有合理的映射来执行此操作?如果您有一组使用的descrete Long值,则可以使用另一种方法创建HashMap
- 1. 为什么我不能使用原语作为syncronized部分的互斥体?
- 2. 为什么我的枚举不能在switch语句中工作?
- 3. 为什么我不能在switch语句中使用NSInteger?
- 4. 为什么可以使用表达式作为语句?
- 5. 为什么我不能够找到通过表达式语言
- 6. 为什么不能让我的正则表达式工作?
- 7. 为什么我的lambda表达式不能使用相同的内部变量?
- 8. 为什么我不能匹配python中正则表达式的最后部分?
- 9. 为什么我不能在int的switch-statement中使用条件作为案例?
- 10. Dynamodb:为什么主键不能成为过滤器表达式的一部分?
- 11. 为什么我的Javascript switch语句不工作?
- 12. 为什么我的LINQ表达式中的FindIndex不起作用?
- 13. 为什么我不能在范围内的switch语句中使用“常量”?
- 14. 为什么我不能使用|| C++ Switch语句中的OR运算符?
- 15. 为什么我不能在SQL case语句中使用位域作为布尔表达式?
- 16. 为什么我的三元表达式不起作用?
- 17. 为什么我的三元表达式不起作用?
- 18. 为什么我的iOS正则表达式不起作用?
- 19. 为什么我的C++正则表达式不起作用?
- 20. 为什么RegExp.escape在我的Ruby表达式中不起作用?
- 21. 为什么我的Python正则表达式不起作用?
- 22. 为什么布尔表达式(带有副作用)不足作为语句?
- 23. 为什么我的范围正则表达式语法不起作用?
- 24. 为什么不能读取switch语句的功能
- 25. 为什么我不能将TextLength分配给Long值类型?
- 26. 为什么使用re.findall()的正则表达式不起作用?
- 27. 为什么我的部分请求,使用:remote不起作用?
- 28. 为什么我不能用正则表达式在Sybase SQL
- 29. 为什么我不能在switch语句中使用元组常量
- 30. 为什么我的switch语句有这么奇怪的行为?
你当然可以使用'char'类型。你试过了吗? –
更正了错误。谢谢 – gstackoverflow
您只能使用byte,char,short或int(来自doc)。您的交换机真的需要超过20亿个案例吗? –