Module  java.desktop
软件包  java.awt.geom

Class CubicCurve2D

  • All Implemented Interfaces:
    ShapeCloneable
    已知直接子类:
    CubicCurve2D.DoubleCubicCurve2D.Float


    public abstract class CubicCurve2D
    extends Object
    implements Shape, Cloneable
    CubicCurve2D类定义了(x,y)坐标空间中的三次参数曲线段。

    该类只是存储二维立方曲线段的所有对象的抽象超类。 坐标的实际存储表示留给子类。

    从以下版本开始:
    1.2
    • Nested Class Summary

      Nested Classes  
      Modifier and Type Class 描述
      static class  CubicCurve2D.Double
      double坐标指定的三次参数曲线段。
      static class  CubicCurve2D.Float
      float坐标指定的三次参数曲线段。
    • 构造方法摘要

      构造方法  
      Modifier Constructor 描述
      protected CubicCurve2D​()
      这是一个无法直接实例化的抽象类。
    • 方法摘要

      所有方法  静态方法  接口方法  抽象方法  具体的方法 
      Modifier and Type 方法 描述
      Object clone​()
      创建与此对象相同类的新对象。
      boolean contains​(double x, double y)
      测试指定的坐标是否在 Shape的边界内,如 definition of insideness所述
      boolean contains​(double x, double y, double w, double h)
      测试 Shape的内部 Shape完全包含指定的矩形区域。
      boolean contains​(Point2D p)
      测试指定Point2D是的边界内Shape ,如所描述的definition of insideness
      boolean contains​(Rectangle2D r)
      测试 Shape的内部 Shape全部包含指定的 Rectangle2D
      Rectangle getBounds​()
      返回一个整数Rectangle完全包围Shape
      abstract Point2D getCtrlP1​()
      返回第一个控制点。
      abstract Point2D getCtrlP2​()
      返回第二个控制点。
      abstract double getCtrlX1​()
      以双精度返回第一个控制点的X坐标。
      abstract double getCtrlX2​()
      以双精度返回第二个控制点的X坐标。
      abstract double getCtrlY1​()
      以双精度返回第一个控制点的Y坐标。
      abstract double getCtrlY2​()
      以双精度返回第二个控制点的Y坐标。
      double getFlatness​()
      返回该曲线的平坦度。
      static double getFlatness​(double[] coords, int offset)
      返回由指定的数组中指定的索引处存储的控制点指定的三次曲线的平坦度。
      static double getFlatness​(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2)
      返回由指示的控制点指定的三次曲线的平坦度。
      double getFlatnessSq​()
      返回该曲线的平坦度的平方。
      static double getFlatnessSq​(double[] coords, int offset)
      返回由指定的数组中存储的指示索引指定的控制点指定的三次曲线的平坦度的平方。
      static double getFlatnessSq​(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2)
      返回由指示的控制点指定的三次曲线的平坦度的平方。
      abstract Point2D getP1​()
      返回起始点。
      abstract Point2D getP2​()
      返回终点。
      PathIterator getPathIterator​(AffineTransform at)
      返回定义形状边界的迭代对象。
      PathIterator getPathIterator​(AffineTransform at, double flatness)
      返回定义展平形状边界的迭代对象。
      abstract double getX1​()
      200新新新新200新新200新200新新200新200新新200新新200新新200新新200新新200新新新200新新200
      abstract double getX2​()
      X-
      abstract double getY1​()
      新新新新200新新200新新200新新200新新200新新200新新200新新新200新新200新新200新新200
      abstract double getY2​()
      以双精度返回终点的Y坐标。
      boolean intersects​(double x, double y, double w, double h)
      测试 Shape的内部是否与指定矩形区域的内部相交。
      boolean intersects​(Rectangle2D r)
      测试 Shape的内部是否与指定的内部相交 Rectangle2D
      void setCurve​(double[] coords, int offset)
      将该曲线的终点和控制点的位置设置为指定数组中指定偏移处的双坐标。
      abstract void setCurve​(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2)
      将该曲线的终点和控制点的位置设置为指定的双坐标。
      void setCurve​(CubicCurve2D c)
      将该曲线的终点和控制点的位置设置为与指定的 CubicCurve2D
      void setCurve​(Point2D[] pts, int offset)
      将该曲线的终点和控制点的位置设置为指定数组中指定偏移量处的 Point2D对象的坐标。
      void setCurve​(Point2D p1, Point2D cp1, Point2D cp2, Point2D p2)
      将此曲线的终点和控制点的位置设置为指定的 Point2D坐标。
      static int solveCubic​(double[] eqn)
      解决其系数在 eqn数组中的 eqn ,并将非复数根返回到同一个数组中,返回根数。
      static int solveCubic​(double[] eqn, double[] res)
      求解系数在 eqn数组中的 eqn ,并将非复数根放入 res数组中,返回根数。
      static void subdivide​(double[] src, int srcoff, double[] left, int leftoff, double[] right, int rightoff)
      细分由存储在 src阵列中的坐标指定的三次曲线,索引号为 srcoff至( srcoff + 7),并将所得到的两条细分曲线存储在相应索引处的两个结果数组中。
      void subdivide​(CubicCurve2D left, CubicCurve2D right)
      细分此三次曲线并将所得到的两个细分曲线存储在左曲线和右曲线参数中。
      static void subdivide​(CubicCurve2D src, CubicCurve2D left, CubicCurve2D right)
      细分由 src参数指定的三次曲线,并将生成的两个细分曲线存储到 leftright曲线参数中。
    • 构造方法详细信息

      • CubicCurve2D

        protected CubicCurve2D​()
        这是一个无法直接实例化的抽象类。 类型特定的实现子类可用于实例化,并提供了许多格式,用于存储满足以下各种存取方法所必需的信息。
        从以下版本开始:
        1.2
        另请参见:
        CubicCurve2D.FloatCubicCurve2D.Double
    • 方法详细信息

      • getX1

        public abstract double getX1​()
        200新新新新200新新200新200新新200新200新新200新新200新新200新新200新新200新新新200新新200
        结果
        起始点的X坐标为 CubicCurve2D
        从以下版本开始:
        1.2
      • getY1

        public abstract double getY1​()
        新新新新200新新200新新200新新200新新200新新200新新200新新新200新新200新新200新新200
        结果
        起始点的Y坐标为 CubicCurve2D
        从以下版本开始:
        1.2
      • getP1

        public abstract Point2D getP1​()
        返回起始点。
        结果
        一个 Point2DCubicCurve2D
        从以下版本开始:
        1.2
      • getCtrlX1

        public abstract double getCtrlX1​()
        以双精度返回第一个控制点的X坐标。
        结果
        第一个控制点的X坐标为 CubicCurve2D
        从以下版本开始:
        1.2
      • getCtrlY1

        public abstract double getCtrlY1​()
        以双精度返回第一个控制点的Y坐标。
        结果
        第一个控制点的Y坐标为 CubicCurve2D
        从以下版本开始:
        1.2
      • getCtrlP1

        public abstract Point2D getCtrlP1​()
        返回第一个控制点。
        结果
        一个 Point2D那就是第一控制点 CubicCurve2D
        从以下版本开始:
        1.2
      • getCtrlX2

        public abstract double getCtrlX2​()
        以双精度返回第二个控制点的X坐标。
        结果
        第二个控制点的X坐标为 CubicCurve2D
        从以下版本开始:
        1.2
      • getCtrlY2

        public abstract double getCtrlY2​()
        以双精度返回第二个控制点的Y坐标。
        结果
        第二个控制点的Y坐标为 CubicCurve2D
        从以下版本开始:
        1.2
      • getCtrlP2

        public abstract Point2D getCtrlP2​()
        返回第二个控制点。
        结果
        一个 Point2D那是的第二个控制点 CubicCurve2D
        从以下版本开始:
        1.2
      • getX2

        public abstract double getX2​()
        X-
        结果
        CubicCurve2D的终点的X坐标。
        从以下版本开始:
        1.2
      • getY2

        public abstract double getY2​()
        以双精度返回终点的Y坐标。
        结果
        终点的Y坐标为 CubicCurve2D
        从以下版本开始:
        1.2
      • getP2

        public abstract Point2D getP2​()
        返回终点。
        结果
        一个 Point2D那就是终点 CubicCurve2D
        从以下版本开始:
        1.2
      • setCurve

        public abstract void setCurve​(double x1,
                                      double y1,
                                      double ctrlx1,
                                      double ctrly1,
                                      double ctrlx2,
                                      double ctrly2,
                                      double x2,
                                      double y2)
        将该曲线的终点和控制点的位置设置为指定的双坐标。
        参数
        x1 - 用于设置此 CubicCurve2D起始点的X坐标
        y1 - 用于设置此 CubicCurve2D起始点的Y坐标
        ctrlx1 - 用于设置此 CubicCurve2D的第一个控制点的X坐标
        ctrly1 - 用于设置此 CubicCurve2D的第一个控制点的Y坐标
        ctrlx2 - 用于设置此 CubicCurve2D的第二个控制点的X坐标
        ctrly2 - 用于设置此 CubicCurve2D的第二个控制点的Y坐标
        x2 - 用于设置此 CubicCurve2D的终点的X坐标
        y2 - 用于设置此 CubicCurve2D的终点的Y坐标
        从以下版本开始:
        1.2
      • setCurve

        public void setCurve​(double[] coords,
                             int offset)
        将该曲线的终点和控制点的位置设置为指定数组中指定偏移处的双坐标。
        参数
        coords - 包含坐标的双数组
        offset - offset的索引, coords开始将此曲线的终点和控制点设置为 coords包含的坐标
        从以下版本开始:
        1.2
      • setCurve

        public void setCurve​(Point2D p1,
                             Point2D cp1,
                             Point2D cp2,
                             Point2D p2)
        将该曲线的终点和控制点的位置设置为指定的 Point2D坐标。
        参数
        p1 - 第一个指定的 Point2D用于设置此曲线的起始点
        cp1 - 第二个指定的 Point2D用于设置此曲线的第一个控制点
        cp2 - 第三个指定的 Point2D用于设置此曲线的第二个控制点
        p2 - 第四个指定的 Point2D用于设置此曲线的终点
        从以下版本开始:
        1.2
      • setCurve

        public void setCurve​(Point2D[] pts,
                             int offset)
        将此曲线的终点和控制点的位置设置为指定数组中指定偏移量处的 Point2D对象的坐标。
        参数
        pts - 一个 Point2D对象的数组
        offset - offset的索引, pts开始将该曲线的终点和控制点设置为 pts包含的点
        从以下版本开始:
        1.2
      • setCurve

        public void setCurve​(CubicCurve2D c)
        将该曲线的终点和控制点的位置设置为与指定的 CubicCurve2D
        参数
        c - 指定的 CubicCurve2D
        从以下版本开始:
        1.2
      • getFlatnessSq

        public static double getFlatnessSq​(double x1,
                                           double y1,
                                           double ctrlx1,
                                           double ctrly1,
                                           double ctrlx2,
                                           double ctrly2,
                                           double x2,
                                           double y2)
        返回由指示的控制点指定的三次曲线的平坦度的平方。 平直度是控制点与连接端点的线的最大距离。
        参数
        x1 -的X坐标指定的起点 CubicCurve2D
        y1 - Y坐标,它指定的起点 CubicCurve2D
        ctrlx1 - 指定 CubicCurve2D的第一个控制点的X坐标
        ctrly1 - 指定 CubicCurve2D的第一个控制点的Y坐标
        ctrlx2 - 指定 CubicCurve2D的第二个控制点的X坐标
        ctrly2 - 指定 CubicCurve2D的第二个控制点的Y坐标
        x2 - 指定 CubicCurve2D的终点的X坐标
        y2 - 指定 CubicCurve2D的终点的Y坐标
        结果
        CubicCurve2D的平坦度由指定的坐标表示。
        从以下版本开始:
        1.2
      • getFlatness

        public static double getFlatness​(double x1,
                                         double y1,
                                         double ctrlx1,
                                         double ctrly1,
                                         double ctrlx2,
                                         double ctrly2,
                                         double x2,
                                         double y2)
        返回由指示的控制点指定的三次曲线的平坦度。 平直度是控制点与连接端点的线的最大距离。
        参数
        x1 -的X坐标指定的起点 CubicCurve2D
        y1 - Y坐标,它指定的起点 CubicCurve2D
        ctrlx1 - 指定 CubicCurve2D的第一个控制点的X坐标
        ctrly1 - 指定 CubicCurve2D的第一个控制点的Y坐标
        ctrlx2 - 指定 CubicCurve2D的第二个控制点的X坐标
        ctrly2 - 指定 CubicCurve2D的第二个控制点的Y坐标
        x2 - 指定 CubicCurve2D的终点的X坐标
        y2 - 指定 CubicCurve2D的终点的Y坐标
        结果
        由指定坐标表示的 CubicCurve2D的平坦度。
        从以下版本开始:
        1.2
      • getFlatnessSq

        public static double getFlatnessSq​(double[] coords,
                                           int offset)
        返回由指定的数组中存储的指示索引指定的控制点指定的三次曲线的平坦度的平方。 平直度是控制点与连接端点的线的最大距离。
        参数
        coords - 包含坐标的数组
        offset - offset的索引, coords开始获取曲线的终点和控制点
        结果
        所述的平面度的平方 CubicCurve2D在由坐标指定 coords指定的偏移量。
        从以下版本开始:
        1.2
      • getFlatness

        public static double getFlatness​(double[] coords,
                                         int offset)
        返回由指定的数组中指定的索引处存储的控制点指定的三次曲线的平坦度。 平直度是控制点与连接端点的线的最大距离。
        参数
        coords - 包含坐标的数组
        offset - 索引 coords ,从中开始获取曲线的终点和控制点
        结果
        所述的平坦性 CubicCurve2D在由坐标指定 coords指定的偏移量。
        从以下版本开始:
        1.2
      • getFlatnessSq

        public double getFlatnessSq​()
        返回该曲线的平坦度的平方。 平直度是控制点与连接端点的线的最大距离。
        结果
        该曲线平坦度的平方。
        从以下版本开始:
        1.2
      • getFlatness

        public double getFlatness​()
        返回该曲线的平坦度。 平直度是控制点与连接端点的线的最大距离。
        结果
        这个曲线的平坦度。
        从以下版本开始:
        1.2
      • subdivide

        public void subdivide​(CubicCurve2D left,
                              CubicCurve2D right)
        细分此三次曲线并将所得到的两个细分曲线存储在左曲线和右曲线参数中。 左右对象中的一个或两个可以与该对象相同或为空。
        参数
        left - 用于存储细分曲线左侧或前半部分的三次曲线对象
        right - 用于存储分割曲线的右半部分或后半部分的三次曲线对象
        从以下版本开始:
        1.2
      • subdivide

        public static void subdivide​(CubicCurve2D src,
                                     CubicCurve2D left,
                                     CubicCurve2D right)
        细分由src参数指定的三次曲线,并将所得到的两个细分曲线存储到leftright曲线参数中。 leftright对象中的一个或两个可能与src对象或null
        参数
        src - 要细分的三次曲线
        left - 用于存储细分曲线的左半部分或前半部分的三次曲线对象
        right - 用于存储细分曲线的右半部分或后半部分的三次曲线对象
        从以下版本开始:
        1.2
      • subdivide

        public static void subdivide​(double[] src,
                                     int srcoff,
                                     double[] left,
                                     int leftoff,
                                     double[] right,
                                     int rightoff)
        将存储在src数组中的坐标指定的三次曲线细分为索引srcoff至( srcoff + 7),并将所得到的两个细分曲线存储在相应索引处的两个结果数组中。 leftright阵列中的一个或两者可以是null或对与src阵列相同的数组的src 请注意,第一个细分曲线中的最后一个点与第二个细分曲线中的第一个点相同。 因此,能够通过相同的数组为leftright和使用偏移,例如rightoff等于( leftoff + 6),以避免该公共点分配额外的存储空间。
        参数
        src - 保存源曲线坐标的数组
        srcoff - 偏移到数组的开头的6个源坐标
        left - 用于存储细分曲线前半部分坐标的数组
        leftoff - 偏移到数组的开头的6个左坐标
        right - 用于存储细分曲线后半部分坐标的数组
        rightoff - 偏移到数组的开头的6个右坐标
        从以下版本开始:
        1.2
      • solveCubic

        public static int solveCubic​(double[] eqn)
        解决其系数在eqn数组中的eqn ,并将非复数根返回到同一个数组中,返回根数。 求解的立方体由下式表示:
          eqn = {c, b, a, d}
             dx^3 + ax^2 + bx + c = 0 
        使用返回值-1来区分一个常数等式,该常数方程可能始终为0或从0不存在零的方程。
        参数
        eqn - 包含立方体系数的数组
        结果
        根数,如果方程为常数则为-1。
        从以下版本开始:
        1.2
      • solveCubic

        public static int solveCubic​(double[] eqn,
                                     double[] res)
        求解系数在eqn数组中的eqn ,并将非复数根放入res数组中,返回根数。 求解的三次方程由等式表示:eqn = {c,b,a,d} dx ^ 3 + ax ^ 2 + bx + c = 0使用-1的返回值来区分常数方程,始终为0或从不为零,从无零的方程式。
        参数
        eqn - 用于求解三次方程的指定数组的系数
        res - 包含由三次方程的解得到的非复数根的数组
        结果
        根数,如果方程为常数则为-1
        从以下版本开始:
        1.3
      • contains

        public boolean contains​(double x,
                                double y)
        测试指定的坐标是否在 Shape的边界内,如 definition of insideness所述
        Specified by:
        contains在接口 Shape
        参数
        x - 要测试的指定X坐标
        y - 要测试的指定Y坐标
        结果
        true如果指定的坐标是在Shape边界内; 否则为false
        从以下版本开始:
        1.2
      • contains

        public boolean contains​(Point2D p)
        测试指定Point2D是的边界内Shape ,如所描述的definition of insideness
        Specified by:
        contains在接口 Shape
        参数
        p - 要测试的指定的 Point2D
        结果
        true如果指定Point2D是的边界内Shape ; 否则为false
        从以下版本开始:
        1.2
      • intersects

        public boolean intersects​(double x,
                                  double y,
                                  double w,
                                  double h)
        测试Shape的内部是否与指定矩形区域的内部相交。 矩形区域被认为是交叉的Shape如果任何点被包含在双方的内部Shape和指定的矩形区域。

        Shape.intersects()方法允许Shape实现保守返回true当:

        • 矩形区域和Shape相交的概率很高,但是
        • 准确地确定这个交叉点的计算是非常昂贵的。
        这意味着对于Shapes这个方法可能会返回true即使矩形区域不与Shape相交。 Area类比大多数Shape对象执行几何交集的更准确的计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        intersects在接口 Shape
        参数
        x - 指定矩形区域左上角的X坐标
        y - 指定矩形区域左上角的Y坐标
        w - 指定矩形区域的宽度
        h - 指定矩形区域的高度
        结果
        true如果Shape的内部和矩形区域的内部相交,或者两者都很可能相交,并且交叉点计算将太昂贵执行; 否则为false
        从以下版本开始:
        1.2
        另请参见:
        Area
      • intersects

        public boolean intersects​(Rectangle2D r)
        测试Shape的内部是否与指定的内部相交Rectangle2D Shape.intersects()方法允许Shape实现保守返回true当:
        • Rectangle2DShape相交的概率很高,但是
        • 准确地确定这个交叉点的计算是非常昂贵的。
        这意味着对于某些Shapes这种方法也可能返回true即使Rectangle2D不相交Shape Area类对大多数Shape对象执行几何交集的更准确的计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        intersects在接口 Shape
        参数
        r - 指定的 Rectangle2D
        结果
        true如果Shape的内部和指定的Rectangle2D的内部相交,或者很可能相交,并且交叉点计算将太昂贵执行; false否则。
        从以下版本开始:
        1.2
        另请参见:
        Shape.intersects(double, double, double, double)
      • contains

        public boolean contains​(double x,
                                double y,
                                double w,
                                double h)
        测试Shape的内部Shape完全包含指定的矩形区域。 位于矩形区域内的所有坐标必须位于Shape内,因为整个矩形区域将被视为包含在Shape

        Shape.contains()方法允许Shape实现保守返回false当:

        • intersect方法返回true
        • 确定Shape是否完全包含矩形区域的计算是非常昂贵的。
        这意味着对于某些Shapes即使Shape包含矩形区域,此方法也可能返回false Area类执行比大多数Shape对象更准确的几何计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        contains在接口 Shape
        参数
        x - 指定矩形区域左上角的X坐标
        y - 指定矩形区域左上角的Y坐标
        w - 指定矩形区域的宽度
        h - 指定矩形区域的高度
        结果
        true如果内部的Shape完全包含指定的矩形区域; false否则或如果Shape包含矩形区域,并且intersects方法返回true并且包含计算将太昂贵执行。
        从以下版本开始:
        1.2
        另请参见:
        AreaShape.intersects(double, double, double, double)
      • contains

        public boolean contains​(Rectangle2D r)
        测试Shape的内部Shape完全包含指定的Rectangle2D Shape.contains()方法允许Shape实现保守返回false当:
        • intersect方法返回true
        • 计算确定Shape是否完全包含Rectangle2D是非常昂贵的。
        这意味着对于某些Shapes这种方法也可能返回false即使Shape包含Rectangle2D Area类比大多数Shape对象执行更精确的几何计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        contains在接口 Shape
        参数
        r - 指定的 Rectangle2D
        结果
        true如果内部的Shape完全包含Rectangle2D ; false否则或如果Shape包含Rectangle2D并且intersects方法返回true ,并且遏制计算将太昂贵执行。
        从以下版本开始:
        1.2
        另请参见:
        Shape.contains(double, double, double, double)
      • getBounds

        public Rectangle getBounds​()
        返回一个整数Rectangle完全包围Shape 请注意,不保证返回的Rectangle是封闭的最小边界框Shape ,只表示Shape完全在指定的范围内Rectangle 如果Shape溢出整数数据类型的有限范围,返回的Rectangle也可能无法完全包含Shape getBounds2D方法通常返回更严格的边界框,因为它在表示方面具有更大的灵活性。

        请注意, definition of insideness可能导致shape定义轮廓上的shape不能被视为包含在返回的bounds对象中的情况,但仅在这些点也未被包含在原始shape

        如果point是内部shape根据contains(point)方法,那么它必须是内部返回Rectangle界限根据对象contains(point)所述的方法bounds 特别:

        shape.contains(x,y)需要bounds.contains(x,y)

        如果一个point不在shape ,那么它可能仍然包含在bounds对象中:

        bounds.contains(x,y)并不表示shape.contains(x,y)

        Specified by:
        getBounds在接口 Shape
        结果
        一个整数 Rectangle ,完全包围了 Shape
        从以下版本开始:
        1.2
        另请参见:
        Shape.getBounds2D()
      • getPathIterator

        public PathIterator getPathIterator​(AffineTransform at)
        返回定义形状边界的迭代对象。 此类的迭代器不是多线程安全的,这意味着此CubicCurve2D类不保证对此CubicCurve2D对象的几何的修改不会影响已经处理的该几何的任何迭代。
        Specified by:
        getPathIterator在接口 Shape
        参数
        at - 要在迭代中返回时应用于坐标的可选 AffineTransform ,如果未转换坐标是 null
        结果
        PathIterator对象返回此 CubicCurve2D的轮廓的几何,一次一个段。
        从以下版本开始:
        1.2
      • getPathIterator

        public PathIterator getPathIterator​(AffineTransform at,
                                            double flatness)
        返回定义展平形状边界的迭代对象。 此类的迭代器不是多线程安全的,这意味着此CubicCurve2D类不保证对此CubicCurve2D对象的几何的修改不会影响已处理的该几何的任何迭代。
        Specified by:
        getPathIterator接口 Shape
        参数
        at - 要在迭代中返回时应用于坐标的可选 AffineTransform ,如果需要未转换的坐标, null
        flatness - 给定曲线的控制点的最大量可以在共线之前变化,而细分曲线由连接终点的直线代替
        结果
        PathIterator对象,返回此 CubicCurve2D的轮廓的几何, CubicCurve2D一个段。
        从以下版本开始:
        1.2
      • clone

        public Object clone​()
        创建与此对象相同类的新对象。
        重写:
        cloneObject
        结果
        这个实例的一个克隆。
        异常
        OutOfMemoryError - 如果没有足够的内存
        从以下版本开始:
        1.2
        另请参见:
        Cloneable