gpt4 book ai didi

java - 将不存在的参数传递给方法

转载 作者:行者123 更新时间:2023-12-01 09:38:00 25 4
gpt4 key购买 nike

我对 Java 编程相当陌生,正如我已经在标题中指出的那样,我想传递一些可以或不可以作为类实例存在的参数。如果它不存在,我想创建它。到目前为止我的代码:

public class TestClass {

public static void main(String[] args) {
Person Ted = new Person();
Person Jack = new Person();
Item it = new Item(Ted);
Item itSec = new Item (Pierce); //Person Pierce doesn't exist => should be created
}
}

public class Person {
public Person(){
//some code
}
}

public class Item {

public Item(Person name){
if(!(name instanceof Person)){
Person name = new Person(); //create that missing instance
}
else{
//some code
}

void getItem(Person name){
System.out.println(name);
}
}

最佳答案

你误解了一些事情。

在声明标识符之前,您不能使用标识符。您的代码中的以下内容不正确:

Item itSec = new Item (Pierce);

那是因为你没有声明Pierce在此行之前。您不必创建该类的实例,但需要一个有效的标识符。您应该先以这种方式声明它:

Person Pierce;

此时标识符或引用为空,可以说,或者等于 null 。所有非本地对象引用都以这种方式启动,或者它们相等 false0 ,以适合其类型的为准。结果与您显式声明的结果相同:

Person Pierce = null;

但是让我们继续吧。假设引用已被声明。 (顺便说一句,Java 使用 camelCaseNotation 作为变量,因此 pierce 是正确的。)假设我们现在处于 Pierce 的时刻。是 null 还是引用某个对象,我们不知道。现在我们称之为:

Item itSec = new Item (Pierce);

new Item(Pierce)调用构造函数public Item(Person name){...}在 Item 类中,您应该知道这一点。但现在,在该构造函数中有一行:

if(!(name instanceof Person)){

你滥用了。这行代码检查的不是变量 name 是否有效等于 null 或现有对象,但 name 的变量类型是 Person 的子类型。在这个地方总是返回 true,如函数标题 public Item(Person name){...}意思是:该函数是公共(public)的,是一个构造函数,参数的类型为 Person (所以 Person 或子类型)。

你想说的是:

public Item(Person name){
if(name==null)){ //if the reference is empty
this.name = new Person(); //I'll explain this below
}
else{
this.name = name; //otherwise the local "name" will stay null
}
}

我用过this.name这是一个巨大的进步。为什么?在您的代码中是 Person name = ... ,这是不正确的 name一旦构造函数完成就不会持续。您需要 Item 中的一个字段类对象,它将保存该值。所以Item类可以这样定义:

public class Item {
Person name;
//...
}

现在字段 name保存行中分配的值:

this.name = new Person();

您需要使用this消除歧义 name你的意思是。一个是 Item class 字段,另一个是 Person name构造函数参数。

现在,我们回到main功能。如果你想要变量 Pierce引用新创建的Person ,这仍然需要完成。可以在此处进行分配,但首先您必须在类 Item 中创建一个函数返回其字段 name 的值。所以:

getName() {
return name;
}

现在从 main 调用它功能:

Pierce = itSec.getName();

就是这样。最后,这个函数没有意义:

void getItem(Person name){
System.out.println(name);
}
}

它没有获取任何元素。它只打印您传递给它的内容。这并不意味着如果你用 getItem(Pierce) 调用它,您将在屏幕上看到“ PIL 斯”。它将调用 Pierce 表示的对象中的 toString 函数,并且按照原样,您将获得一个标准对象标识符。但如果你定义一个函数:

void printItem() {
System.out.println(name);
}

那么你可以这样调用它。对于现有对象 itSec :

itSec.printItem();

对于 getter 函数,它应该返回您所要求的内容,但那是另一个故事了。

关于java - 将不存在的参数传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38685344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com