在Java中将java.lang.Object转换为int

5

我有一个返回类型为 java.lang.object 的方法,我想将它转换为 int。我尝试了以下代码:

oldComment.get("count"); 

我想要把返回一个java.lang.object的方法结果转换成整数。我尝试了以下代码:

(Integer)oldComment.get("count");
Integer.valueOf(oldComment.get("count"));
Integer.parseInt(oldComment.get("count"));


con = Base.connection();
String query = "UPDATE COMMENT SET LIKES = ? WHERE POST_ID = ?";
PreparedStatement pst = con.prepareStatement(query);
pst.setObject(1, (Integer.parseInt(oldComment.get("likes").toString())) + Integer.valueOf(rateComment.getCount()));
pst.setString(2, rateComment.getPost_id());
int k = pst.executeUpdate();

这是导致问题的代码:(Integer.parseInt(oldComment.get("likes").toString()))错误堆栈跟踪:
[qtp25844331-17] ERROR spark.http.matching.GeneralError -
java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:592)
        at java.lang.Integer.parseInt(Integer.java:615)
        at com.soul.seeker.serviceImpl.CommentRatingServiceImpl.rateComment(CommentRatingServiceImpl.java:50)
        at com.soul.seeker.Application.lambda$main$12(Application.java:161)
        at spark.ResponseTransformerRouteImpl$1.handle(ResponseTransformerRouteImpl.java:47)
        at spark.http.matching.Routes.execute(Routes.java:61)
        at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:130)
        at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
        at org.eclipse.jetty.server.Server.handle(Server.java:517)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
        at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
        at java.lang.Thread.run(Thread.java:745)

上述方法都无法解决问题。我应该如何进行转换?


它的类型是 java.lang.Object - kittu
@NishadKAhamed 也试过了,但是没有效果。 - kittu
请提供一个您的对象示例,以及它应该给出哪个Integer,以及为什么。 - Arnaud
发布堆栈跟踪。 - Nishad K Ahamed
@NishadKAhamed 更新了问题并附上了堆栈跟踪。 - kittu
显示剩余4条评论
1个回答

2

首先,你不应该返回java.util.Object,这是一个非常不好的习惯。如果你的值是数字,应该返回java.lang.Number。如果是字符串,应该返回java.lang.String等。

如果没有选择,你可以使用以下代码进行转换:

// This method can throw NumberFormatException, catch it if you want
public Integer toInt(Object obj) {
    // Use intValue on a Number to improve performance
    if(obj instanceof Number) {
         return ((Number) obj).intValue();
    }

    return Integer.parseInt(obj.toString());
}

编辑:在您的堆栈跟踪中,您的程序尝试解析一个空字符串,因此会抛出NumberFormatException异常,您应该捕获它。


这是从其他库返回的一个方法。我别无选择,只能尝试转换它。 - kittu
你的方法类似于这行代码对吧?(Integer.parseInt(oldComment.get("likes").toString())) - kittu
我不确定为什么它里面有值时会抛出NFE。 - kittu
是的,结果是一样的。在您的堆栈跟踪中,没有值:java.lang.NumberFormatException: For input string: "" - Dorian
但是当我打印 oldComment.get("count") 时,它会打印出值。 - kittu
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接