java - 从另一个构造函数调用默认构造函数
问题描述
我应该使用用户给出的 3 个点创建一个三角形对象,如果三角形不合法,则创建默认的。这是使用默认方法创建默认方法的“合法”方式,还是这是一种奇怪的场景,不是人们做事的方式?
public class Triangle
private Point _point1;
private Point _point2;
private Point _point3;
public Triangle()
{
_point1 = new Point(1,0);
_point2 = new Point(-1,0);
_point3 = new Point(0,1);
}
public Triangle(Point point1,Point point2,Point point3)
{
if (isLegal(point1,point2,point3))
{
_point1 = new Point(point1);
_point2 = new Point(point2);
_point3 = new Point(point3);
}
else
new Triangle();
}
解决方案
你可以像这样解决你的问题(代码清理了一点):
public class Triangle {
private final Point point1;
private final Point point2;
private final Point point3;
public Triangle() {
this(new Point(1, 0), new Point(-1, 0), new Point(0, 1));
}
public Triangle(Point point1, Point point2, Point point3) {
if (!isLegal(point1, point2, point3)) {
throw new IllegalArgumentException("Points are illegal");
}
this.point1 = point1;
this.point2 = point2;
this.point3 = point3;
// or if you need a copy constructor
// this.point1 = new Point(point1);
// this.point2 = new Point(point2);
// this.point3 = new Point(point3);
}
public static boolean isLegal(Point point1, Point point2, Point point3) {
// some magic calculations
return result;
}
}
最后Triangle
用你现有的点创建你喜欢的东西p1
, p2
, 3
:
final Triangle t = Triangle.isLegal(p1, p2, p3) ? new Triangle(p1, p2, p3) : new Triangle();
或者
Triangle t;
if(Triangle.isLegal(p1, p2, p3)) {
t = new Triangle(p1, p2, p3);
} else {
t = new Triangle();
}
静态方法isLegal
用于在调用构造函数之前检查您的参数。构造函数内部的检查确保具有三个点的构造函数没有与非法参数一起使用。如果给定点是“非法的”,则抛出异常并退出您的应用程序,如果它没有在某处被捕获(谷歌:java异常)。
推荐阅读
- android - 试图制作一个有 40 列或字符的文本控制台
- python - 嵌入 PyQt 时 Pygame 不返回事件
- javascript - 根据 typeof 参数值返回类型
- java - 当我尝试在 SQLite Android Studio 上进行插入时出错
- java - 关于带有测试自动化的 IntelliJ 项目结构的问题
- android - 语法错误有人可以检查
- javascript - 根据选择的选项更改的下拉框 REACT
- flutter - flutter popUntil 从最后三个路由调用 initState
- mobile - jquery-one-page-nav 在移动设备上不起作用
- python - 如何使用 Selenium 在文本字段中插入值?