如何检查char是否作为int传递

use*_*617 1 java

是否可以检查是否已将char传递给需要int的方法?例如,如果你有一些函数foo(int bar)并且有人使用像foo('t')这样的函数,你是否能够找到输入的char而不是int?我知道char被转换为int但我试图限制除纯粹整数之外的任何东西.

干杯

Ada*_*eld 9

不,这是不可能的,因为Java本身就可以升级charint它.

你可以使你的函数重载一个char参数,而不是一个int可能引发异常的参数,但这不会阻止任何人将其转换char为一个int并调用该int版本.

'A'转换为整数的字符常量与整数65 之间完全没有区别,因此完全不可能区分这些情况.

来自Pax的更新:

我认为显式转换不会传递a char,它是调用者将a转换charint然后传递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)


set*_*ora 8

您可以使用Integer而不是int.

void foo(Integer bar) { }
Run Code Online (Sandbox Code Playgroud)

如果您尝试调用foo('A'),您将收到编译器错误.