【问题标题】:Java - get an Integer value from String or int - avoiding instanceofJava - 从 String 或 int 获取整数值 - 避免 instanceof
【发布时间】:2014-11-03 12:05:35
【问题描述】:

getInt 方法是否有单行实现?

如果没有 - 可以不使用instanceof 来实现它吗?

public class ParseInt {
    public static void main(String[] args) {
        Object intArr[] = { "131", 232, new Integer(333) };

        for (Object intObj : intArr) {
            System.out.println(getInt(intObj));
        }
    }

    private static int getInt(Object obj) {
        return // ???
    }
}

【问题讨论】:

  • 你为什么还要提到反射?没有必要。不过,需要instanceof,但这不是反思。
  • return obj instanceof Number? ((Number)obj).intValue() : Integer.parseInt((String)obj);
  • 好的,我的意思是instanceof 不是反射...

标签: java casting integer instanceof


【解决方案1】:

使用Integer.valueOf(obj.toString)

private static int getInt(Object obj) {
    return Integer.valueOf(obj.toString());
}

这将适用于您的对象数组

【讨论】:

  • 如果objnull,这将失效。您可以改用String#valueOf(Object),如果传递的参数是null,它将返回字符串"null"
  • @JonK - String#valueOf(Object) 将抛出 NumberFormatException 而不是 NPE。为什么你的建议更好?
  • @Elist 真的是个人喜好问题。由您决定哪个例外对给定情况更有意义。如果您更喜欢NullPointerException,那就去吧。
【解决方案2】:

尝试类似...

private static int getInt(Object obj) {
    if (obj instanceof String) {
        return Integer.parseInt((String) obj);
    } else if(obj instanceof Integer){
        return (Integer) obj;
    } else{
        return 0; // or else whatever you want
    }
}

【讨论】:

  • 您也可以使用String#valueOf(Object) 代替演员表
  • 希望obj 不是XXX 的实例(除StringInteger 之外的任何类)
猜你喜欢
  • 1970-01-01
  • 2011-09-03
  • 2013-03-05
  • 1970-01-01
  • 2012-04-18
  • 2022-11-15
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多