【问题标题】:Constructor logic to throw Illegal Argument Exception抛出非法参数异常的构造函数逻辑
【发布时间】:2021-06-11 18:13:20
【问题描述】:

我有一个名为Ship 的类,它应该将物理尺寸weightheightname 传递给它的构造函数。我也有一个自定义的Exception,当用户尝试使用非法参数实例化Ship 对象时应该抛出它...... 用户无法为weightheight 输入0,也不会尝试为船的name 输入空名称

class Ship {

   private double weight;
   private int height;
   private String name;

   public Ship(int w, int h, String name) {
      // I am not sure if object instance check logic should go here
      // but it should throw this custom exception class defined
   }
}

class CustomIllegalArgumentException extends Exception {

   public CustomIllegalArgumentException(String r) {
      super(r);
   }
}

【问题讨论】:

  • 请学会正确缩进,并为代码留出空间。
  • 不确定是否可行,但我会尝试
  • 学习如何这样做确实是可能的。什么意思?
  • 我可以 100% 确认可以正确格式化您问题中的代码。
  • 好的,伙计们,编辑问题以显示构造函数是类的子类

标签: java class constructor


【解决方案1】:

如果你的构造函数不喜欢它得到的参数,它可以抛出上述异常。

public Ship(int w, int h, String name) throws CustomIllegalArgumentException{
   if (w <= 0 || h <= 0) {
      throw new CustomIllegalArgumentException("Invalid ship size!");
   }
   if (name == null || name.length() == 0) {
      throw new CustomIllegalArgumentException("Give your ship a name!");
   }
   // rest of your logic.
}

【讨论】:

  • 测试你的代码,如果它产生积极的结果将接受答案
  • 嘿,我传递了一个空字符串作为参数广告程序没有抛出非法名称异常.........=new Ship(9,8,"")你能相应地纠正
  • 那不是null。这是一个空的String。你可能贴错了。看到这张图片:imgur.com/a/OllJriw(我会编辑我的答案并将图像放在那里,但由于某种原因,我无法编辑我的答案???)
  • 好的,你可以编辑让它为空字符串抛出异常吗?
  • 已将其更改为 if (name == null || name.length() == 0||name.isEmpty()),现在可以使用,感谢您提供的图片
猜你喜欢
  • 2011-11-04
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2019-07-11
  • 2013-03-25
相关资源
最近更新 更多