繁体   English   中英

Java中可以进行匿名对象实例化吗?

[英]Is anonymous object instantiation possible in Java?

谁能告诉我下面两行代码之间的区别?

ArrayList<Car> dat;
dat = (new DataSource()).getCar();

DataSource ds = new DataSource();
dat = ds.getCar(); 

new DataSource()放在括号中是什么意思?

最后,这两种情况下dat的结果是什么?

 ArrayList<Car> dat;

 ArrayList<Car> dat = new ArrayList();

注意: getCar帮助器函数将ArrayList返回给dat

您发布的代码的两个版本之间没有实际区别。 两种情况下dat的值都相同。

您发布的代码的第二个版本更容易被人阅读,因此,在代码维护和可读性方面,您可能希望使用该版本。

同样,在第一个版本中,由于您没有存储对(new DataSource())结果的引用,因此您将无法在其他任何地方使用(new DataSource())的值。 如果您不需要代码中的其他任何地方的结果,那么这当然不是问题。

至于问题的第二部分,在Java中,您可以想到ArrayList<Car> dat; ArrayList<Car> dat = null; 当您声明这样的引用时,它不会指向任何内容。 当您将其声明为ArrayList<Car> dat = new ArrayList<Car>; 但是,您正在创建一个新的ArrayList对象并使dat引用它。

ArrayList<Car> dat;
dat = (new DataSource()).getCar();

括号是多余的。 你也可以写

dat = new DataSource().getCar();

在您引用的另一个版本中,您要做的另一件事-创建一个引用您DataSource的变量,以备将来使用。

在回答第二个问题时,

ArrayList<Car> dat;

不创建对象。 这里没有ArrayList ,只是一个不引用任何内容的变量。 另一方面,

ArrayList<Car> dat = new ArrayList();

创建一个ArrayList和一个引用它的变量。

唯一的区别是,在第二个示例中,您在方法调用期间保留了对DataSource对象的引用。 同样,外部括号是多余的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM