不使用"new"关键字传递和返回类对象

3

我是一个Java新手,正在阅读一些与Java面向对象有关的传递类和返回类的问题,但不幸的是找不到答案。因此,我提出了我的问题,希望你们可以自由地分享你们的想法。

假设我们有一个与组合相关的代码块,“一个案例在类“dimension”中定义了一些尺寸”:

public class Case {
private String model;
private Dimensions dimensions;

public Case(String model, Dimensions dimensions) {   // line AAA
    this.model = model;
    this.dimensions = dimensions;
}

public Dimensions getDimensions() { 
    return dimensions; //line BBB

问题1: 在AAA行,我们将“Dimensions dimensions”作为参数传递给构造函数,为什么不使用“new”关键字来实例化对象?

问题2: 在BBB行,我们返回“dimensions”,为什么不使用“return new Dimensions”来返回一个对象。在一些文章中,我看到他们使用了“new”。那么我们应该在什么情况下使用“new”,在哪些情况下不使用呢?

谢谢。


2
因为我们已经传递了一个完全构造好的对象或实例。 - Thiyagu
3个回答

2

问题1: 在AAA行,我们将“Dimensions dimensions”作为参数传递给构造函数,为什么不使用“new”关键字实例化对象?

通常情况下,您会像以下示例一样传递已经创建的对象:

String model = "myModel";
Dimensions dim = new Dimensions(); 
Case case = new Case(model, dim);

因此,现在case对象的dimensions变量将持有通过构造函数传递的dimension对象的引用。

问题2:在BBB行,我们返回“dimensions”,为什么不使用“return new Dimensions”来返回一个对象。在一些文章中,我看到他们使用了这种方式。那么我们应该在哪些情况下使用“new”,在哪些情况下不使用?

方法getDimensions()是一个getter方法,意味着我们想要获取this对象的dimension值。因此,返回一个新的dimension对象没有意义。要获取上面创建的case对象的dimension,您可以使用:

Dimensions caseDimension = case.getDimensions();

感谢您的回答。只是想确保我正确理解了您的意思,
  • 将某些内容传递到构造函数/方法的参数中:它们应该是引用吗?例如 public String getMoney(String name) <<< String name 是一个引用而不是值。这与我的示例中 AAA 行中的 Dimension dimension 相同。
  • 方法的返回值:应该是值;但是 "return dimension" 是值还是引用?
- LearningandWorking
(a) 将某些内容传递到构造函数/方法的参数中:它们应该是引用吗?-- 不是。如果它是原始类型(如int等),则不存在引用/对象的概念。(b) public String getMoney (String name) <<< String name 是一个引用而不是值 -- 正确。在这里,我们传递了一个字符串字面量。(c) 但是"return dimension"是值还是引用 -- 引用。 - Nicholas K

0

你的示例中Dimensions实例是在Case类外部构建的。

例如,该类的可能使用方式如下:

Dimensions dim = new Dimensions ();
Case c = new Case ("something", dim);

然后

Dimensions d = c.getDimensions();

正如您所看到的,我们正在将对Dimensions对象的引用传递给Case构造函数。 Case构造函数将该引用存储在实例变量(dimensions)中,稍后我们可以调用getDimensions()方法以获取该引用。

只有当您想要构造一个类的新对象时才使用new关键字。


0
我想回答你的子问题: 在一些文章中,我看到他们使用。 假设您在Case中有一个方法,目的是以某种方式更改尺寸并返回它,例如public Dimensions stretch()。在这种情况下,您可以使用return new Dimensions();
public Dimensions stretch(//some arguments){
    this.dimensions = new Dimensions(//args);
    return dimensions;
}

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