构造函数中的输入类型不正确

时间:2015-02-24 16:06:40

标签: java constructor

class Target {
String name;
int amount;
double weight;
    Target (String targetName, int targetAmount, double targetWeight) {
        name = targetName;
        amount = targetAmount;
        weight = targetWeight;
  }
}

完全任意的构造函数,它不是更大的东西的一部分。

假设我在某处创建了这个实例 如果我输入错误类型的参数

Target object1 = new Target("Apple", 4.32, "who knows?")

如何让构造函数检查参数的类型是否正确,如果不是,请再次声明object1

在构造函数中编写while循环是否可以接受? (只要类型不正确并使用instanceof检查并要求重新输入)

另一个想法是创建一个单独的方法来处理instanceof检查,但参数有不同的类型,有没有办法返回参数的声明类型?

或者我完全过度思考这个问题并且有更简单的方法吗?

3 个答案:

答案 0 :(得分:3)

您不需要,因为Java编译器在编译时会给您一个错误。它是强类型的,意味着变量只有一种类型和一种类型。

您提供的代码无法编译

答案 1 :(得分:2)

首先,如果给构造函数提供错误的参数,java编译器将返回错误。回答你的第二个问题,可以在构造函数中使用while循环。

答案 2 :(得分:1)

Target object1 = new Target("Apple", 4.32, "who knows?")会给你一个编译时错误。在编译期间,方法调用是已解析,但实际调用是在运行时完成的。

因此,一旦遇到上述语句,编译器会检查是否存在能够接受这些参数的构造函数,如果,则会出现错误

如何让构造函数检查参数的类型是否正确以及是否不是,请求再次声明object1。 - 你不应该这样做。在new is called时调用构造函数,即在创建对象时,如果参数不匹配,则构造函数本身不会被调用。使用静态助手方法(如果需要)。

在构造函数中编写while循环是否可以接受? (使用instanceof检查,只要类型不正确并要求重新输入)

您不应在构造函数中包含任何业务逻辑。这就是全部。 instanceof检查可能可接受,具体取决于具体情况(具体情况)

我完全过度思考这个问题,并且有一种更简单的方法 - 是的。不要使用无效的参数调用构造函数。不要将业务逻辑放入其中。验证逻辑是可以接受的。