2014-01-26 40 views
1

关于使用new关键字创建对象的语法。我知道,语法来创建一个对象是:Java中的对象创建语法

Foo ref = new Foo(); 

做本身就是java语言提供某种机制如上所述,可以创造出比标准语法其他对象?

我知道Scala具有这样的功能,或者可能是其他一些JVM兼容语言,但我只想从核心Java角度来了解它。

没有使用关键字'new'和赋值操作符'='。例如,它可以像Foo ref Create()。 ?现在我想开发'创建'方法来取代传统的语法。

+2

http://stackoverflow.com/questions/95419/what-are-all-the-different-ways-to-create-an-object-in-java – Maroun

+2

赋值运算符**没有任何**要做用对象的**创建**。 –

回答

4

您可以创建一个对象的另一种方式是通过反射:使用反射API如

Foo ref = Foo.class.newInstance() 
+0

你是对的,但我一直在想没有使用关键字'新'和作业操作'='。例如,它可以像Foo ref Create()。 – Moby

0

Class.newInstance()

Foo ref = Foo.class.newInstance(); 

请阅读Class API的doc。去Spring Dependency injection,它会帮助你。

page可以给你一个良好的开端

+0

感谢您的回复。但就目标创造而言,我正在寻找或考虑灵活性。 Foo.Class.newInstance()仍将我绑定到预定义的语法。我正在寻找更多的灵活性,它遵循java语法,但能够根据我的意愿自定义对象创建过程。 – Moby

+0

那么我相信你正在寻找依赖注入 - 由框架基础上,配置 – Keerthivasan

+0

@Octopus我怀疑他正在寻找DI,更像DSL的和自定义的语法 –

2

这里是你在找什么:

不同方式的Java

创建对象这是琐事。是的,这是一个棘手的问题,人们经常感到困惑。我搜查了很多,以清除我所有的疑虑。

有四种不同的方式(我真的不知道有没有第五种方式来做到这一点)来创建Java对象:

  1. 使用new关键字 这是创建一个最常用的方法在java中的对象。我在某处读到几乎99%的对象是以这种方式创建的。

MyObject object = new MyObject();

  1. 使用Class.forName() 如果我们知道类&的名字,如果它有一个公共的默认构造函数,我们可以创建这样一个对象。

MyObject object =(MyObject)Class.forName(“subin.rnd.MyObject”)。newInstance();

  1. 使用clone() clone()可用于创建现有对象的副本。

MyObject anotherObject = new MyObject(); MyObject object = anotherObject。克隆();

  1. 使用对象反序列化 对象反序列化只不过是从其序列化形式创建对象。

ObjectInputStream inStream = new ObjectInputStream(anInputStream); MyObject object =(MyObject)inStream.readObject();

现在你知道如何创建一个对象。但建议只在有必要时才创建对象。


来源:http://javabeanz.wordpress.com/2007/09/13/different-ways-to-create-objects/

P.S:我复制从帖子的文字,因此它是可见的,即使该链路出现故障。
我希望这有助于。

+0

借口,但这仍然是抄袭。 –

+0

链接可能会死亡,并使其独立于此。我已经复制了其中提到的来源的文字。这显然不是抄袭。 –

+0

只要提到源代码是不够的:只需要复制粘贴,而没有自己的贡献就是剽窃。 –

0

你能避免使用大部分代码的new运营商通过创建你的类的静态工厂方法:

​​

然后实例化看起来是这样的:

Foo f = Foo.create(); 

这没有太大的更简洁,但它具有几个优点,如有效Java的第1部分详述:它允许泛型的类型推断(Map<String,String> m = Maps.newHashMap();而不是Map<String,String> m = new HashMap<String,String>();),并允许您将该方法在将来更改为例如记忆对象而不是在每次调用时创建一个新对象。