是否可以检查是否已将char传递给需要int的方法?例如,如果你有一些函数foo(int bar)并且有人使用像foo('t')这样的函数,你是否能够找到输入的char而不是int?我知道char被转换为int但我试图限制除纯粹整数之外的任何东西.
干杯
不,这是不可能的,因为Java本身就可以升级char到int它.
你可以使你的函数重载一个char参数,而不是一个int可能引发异常的参数,但这不会阻止任何人将其转换char为一个int并调用该int版本.
在'A'转换为整数的字符常量与整数65 之间完全没有区别,因此完全不可能区分这些情况.
来自Pax的更新:
我认为显式转换不会传递a char,它是调用者将a转换char为int然后传递int.这个解决方案捕获了a的无意中传递char.
从另一个答案中捏出某人的代码,那将是:
public class Test {
private static void someMethod(char c) throws Exception {
throw new Exception("I don't think so, matey!");
}
private static void someMethod(int i) {
System.out.println(i);
}
public static void main(String[] args) throws Exception {
someMethod(100);
someMethod('d');
}
}
Run Code Online (Sandbox Code Playgroud)
这导致:
100
Exception in thread "main" java.lang.Exception: I don't think so, matey!
at Test.someMethod(Test.java:4)
at Test.main(Test.java:13)
Run Code Online (Sandbox Code Playgroud)
您可以使用Integer而不是int.
void foo(Integer bar) { }
Run Code Online (Sandbox Code Playgroud)
如果您尝试调用foo('A'),您将收到编译器错误.
| 归档时间: |
|
| 查看次数: |
3649 次 |
| 最近记录: |