Java中的new Object[]{}是什么意思?

10

在Java中,您可以执行以下操作:

new Object[] { /* parameters separated by comma */};

确实,这在Spring框架的预处理语句中使用。

getJdbcTemplate().queryForList(
   "DELETE FROM foo WHERE id = ?", //the "?" mark will be substituted by "3"
   new Object[] { 3 }, //What kind of magic is this?
   String.class //Irrelevant in this example
);
  • 这个叫什么?
  • 那里正在发生什么?
  • 你怎样访问那些参数?

1
你正在花括号({})中初始化数组。在这个例子中,使用的是一个 Integer 3。 - Danny
9个回答

21
Object[] objs = new Object[]{3,4};

与之相同:

Object[] objs = new Object[2];
objs[0] = 3;
objs[1] = 4;
所以你可以通过objs[0]来访问它;

3
数组没有add方法。我认为你想要使用列表...或者 objs[0]=3; objs[1]=4; - Danny

4

这是用于初始化一个Object数组的,数组的第一个索引0的值为3


3
这段代码可以翻译为以下内容:
private void queryforlist(string SQL, object[] parameters, Class c)
{
   //parameters is an array of objects used to replace the ? caracteres in the sql
   //text.

   if (parameters != null)
   {
     //we can access parameters by index inside the method
     for(int i=0; parameters.length; i++)
     {
       if (parameters[i] instanceof String )
       {
         //adding quotes to string for example
         String param = "\""+parameters[i]+"\"";
     
       } else if (parameters[i] instanceof Integer )
       {
         //Note is Integer not int because of AutoBoxing: 
       }
     }
   }
}   

这对于接受动态数据类型非常有用,例如整数、字符串等,并可单独处理它们,例如:在Oracle数据库/提供程序中为日期添加to_date()。

它被定义为一个对象数组,以接受多个参数,因此查询可以按您想要的方式构建。

这条特定的线:

new Object[] { 3 }

可以翻译为:

Object[] AnonymousArrayObject  = new Object[1];
AnonymousArrayObject [0] = 3;

由于queryForList方法接收一个对象数组作为参数,所以有多种调用该方法的方式:

示例1

getJdbcTemplate().queryForList(
    "DELETE FROM foo WHERE id = ?",
    new Object[] { 3 }, 
    String.class
);

例子2

Object[] Parameters = new Object[1];
parameters[0] = 3;

getJdbcTemplate().queryForList(
   "DELETE FROM foo WHERE id = ?",
   Parameters, 
   String.class
);

示例3

Object[] Parameters = new Object[] { 3 };

getJdbcTemplate().queryForList(
   "DELETE FROM foo WHERE id = ?",
   Parameters, 
   String.class
);

例子1、2和3在做同样的事情

例子4

getJdbcTemplate().queryForList(
   "DELETE FROM foo WHERE id = ?",
   null, 
   String.class
);

例子5

Object[] Parameters = null;
getJdbcTemplate().queryForList(
   "DELETE FROM foo WHERE id = ?",
   Parameters, 
   String.class
);
示例4和示例5正在执行相同的操作

这被称为什么?

这被称为数组的创建和初始化的简写,因为您不需要声明变量以访问对象数组在那个特定的时刻。

那里发生了什么?

答案中有解释!

如何访问这些参数?

答案中有解释!

自动装箱


3
你问到的是这个内容:
  new Object[] { 3 }

正如其他答案所说,这是创建和初始化一个对象数组,将其作为参数传递给queryForList方法。
该数组的实际类型将为Object[],其长度将为1,其第一个元素将是一个Integer对象...它通过自动装箱生成了值为3int值。
你后面的问题对我来说没有多大意义:
  • 这是如何调用的?
它被称为“创建和初始化数组”。
  • 那里正在发生什么?
它正在创建和初始化一个数组。
  • 你如何访问这些参数?
嗯...就像示例中显示的那样?按值?通过索引数组?你的问题不是很清楚。

1

new Object[] { /* 用逗号分隔的参数 */};

创建匿名的 Object 数组

逗号分隔的参数是数组的元素。

元素数量为数组的 length


我确信匿名类在其类名末尾有$id(其中id是数字),但我在“匿名数组”中没有看到这一部分。同时,我在官方Java教程中也找不到这个术语。你有一些参考资料吗?我可以在哪里阅读更多关于它们的信息?也许是Java语言规范? - Pshemo
@Pshemo 可能会对这个这个有所帮助。 - Nishant
我看过这个,但我更喜欢官方来源。无论如何,谢谢你的搜索 :) - Pshemo
那里也没有关于匿名数组的信息。我猜这只是社区发明的术语。无论如何,感谢您的帮助。 - Pshemo
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/41437/discussion-between-n1234-and-pshemo - Nishant
显示剩余2条评论

0

大多数情况下,这种情况发生在使用DAO示例或与数据库相关的应用程序时 例如:- ========

    public Emp getEmpById(int id){  
        String sql="select * from Emp99 where id=?";  
        return template.queryForObject(sql, new Object[]{id},new 
            BeanPropertyRowMapper<Emp>(Emp.class));

在上面的示例查询中,根据动态用户请求ID号获取员工数据,所有员工都被视为列表,分别对请求的数据动态响应。

0
创建匿名对象数组。
new Object[] { /* parameters separated by comma */};

在索引0处初始化一个值为3的数组

new Object[] { 3 }

最后一个例子与以下的例子相同:
Object[] obj = new Object[1];
objs[0] = 3;

嗯...在Java中,数组没有add方法。 - Stephen C

0

代码 new Object[] { /* 逗号分隔的参数 */}; 例如 new String[] {"a","b", "c"} 创建了 3 个 String 类型的对象。


0

new Object[] 表示这是一个 Object 类型的数组。new Object[]{3} 是一种简写方式,将该数组赋值为整数 3。


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