Java中新的Object [] {}意味着什么?

时间:2013-11-18 17:57:15

标签: java

在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
);
  • 这怎么称呼?
  • 那里发生了什么?
  • 你怎么能访问这些参数?

9 个答案:

答案 0 :(得分:13)

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

与:

相同
Object[] objs = new Object[2];
objs[0] = 3;
objs[1] = 4;

所以你以objs [0]的形式访问它;

答案 1 :(得分:4)

它用于初始化Object的数组,其值3的索引为0

答案 2 :(得分:3)

你问过这个问题:

  new Object[] { 3 }

正如其他答案所说,它正在创建和初始化一个对象数组,这些对象将作为参数传递给queryForList方法。

数组的实际类型为Object[],其长度为1,其第一个元素为Integer对象...通过自动装箱int生成价值3


其余的问题对我来说没有多大意义:

  
      
  • 这怎么称呼?
  •   

它被称为“创建和初始化数组”

  
      
  • 那里发生了什么?
  •   

正在创建和初始化数组

  
      
  • 你怎么能访问这些参数?
  •   

嗯......如示例所示?按价值?通过索引数组?目前尚不清楚你在问什么。

答案 3 :(得分:1)

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

创建Object

的匿名数组

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

元素数量是数组的length

答案 4 :(得分:1)

此代码可能会转换为以下

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正在做同样的事情

  

这怎么称呼?

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

  

那里发生了什么?

在答案中解释!

  

你怎么能访问这些参数?

在答案中解释!

AutoBoxing

答案 5 :(得分:0)

创建Object的匿名数组。

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

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

new Object[] { 3 }

最后一个例子与:

相同
Object[] obj = new Object[1];
objs[0] = 3;

答案 6 :(得分:0)

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

答案 7 :(得分:0)

new Object[]表示它是Object类型的数组。 new Object[]{3}是为这个数组分配一个Integer 3的简写。

答案 8 :(得分: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号来获取员工数据,所有员工都认为是列表,ID号分别对请求的数据进行动态响应