有没有办法检查使用泛型的变量类型?

时间:2017-11-08 09:29:31

标签: java variables generics

以伪代码为例:

public static<T> int findNumber(T xNumber, double a, int b){
    if (xNumber == int) {
        // do something... return some number...
    } else {
        return null; 
    }

有没有办法在实际运行的Java代码中表达这一点?

2 个答案:

答案 0 :(得分:1)

您无法使用Java代码表达此特定情况。

您可能会发现an answer here有关原因。

但是,如果您希望将泛型用于整数,则Integer Java类支持通用性。它还实现了native int使用的每个基本操作(+ - * /%)。在您的示例中,您可以使用:

if (xNumber instanceof Integer)

甚至

if (xNumber.getClass() == Integer.getClass())

正如@Stultuske在评论中所建议的那样。

编辑:关于你班级设计的评论也是如此。您可能想要重新设计代码,因此您不必检查通用对象的类型(特别是因为您正在检查单个类类型)。

答案 1 :(得分:0)

班级Number导致几乎隐藏的存在,但非常有用。

public static <T extends Number> int findNumber(...)
    ... xNumber.intValue() // longValue(), doubleValue()
    if (xNumber instanceof Integer) ...

由于类型擦除更多是不可行的。