Class AbstractLaneBasedGTU2
- All Implemented Interfaces:
java.io.Serializable,Locatable,EventProducerInterface,Identifiable,Drawable,GTU,LaneBasedGTU
- Direct Known Subclasses:
AbstractLaneBasedIndividualGTU
public abstract class AbstractLaneBasedGTU2 extends AbstractGTU implements LaneBasedGTU
The starting point of a LaneBasedTU is that it can be in multiple lanes at the same time. This can be due to a lane change (lateral), or due to crossing a link (front of the GTU is on another Lane than rear of the GTU). If a Lane is shorter than the length of the GTU (e.g. when we do node expansion on a crossing, this is very well possible), a GTU could occupy dozens of Lanes at the same time.
When calculating a headway, the GTU has to look in successive lanes. When Lanes (or underlying CrossSectionLinks) diverge, the headway algorithms have to look at multiple Lanes and return the minimum headway in each of the Lanes. When the Lanes (or underlying CrossSectionLinks) converge, "parallel" traffic is not taken into account in the headway calculation. Instead, gap acceptance algorithms or their equivalent should guide the merging behavior.
To decide its movement, an AbstractLaneBasedGTU applies its car following algorithm and lane change algorithm to set the acceleration and any lane change operation to perform. It then schedules the triggers that will add it to subsequent lanes and remove it from current lanes as needed during the time step that is has committed to. Finally, it re-schedules its next movement evaluation with the simulator.
Copyright (c) 2013-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
BSD-style license. See OpenTrafficSim License.
- Version:
- $Revision: 1408 $, $LastChangedDate: 2015-09-24 15:17:25 +0200 (Thu, 24 Sep 2015) $, by $Author: pknoppers $,
initial version Oct 22, 2014
- Author:
- Alexander Verbraeck, Peter Knoppers
- See Also:
- Serialized Form
-
Field Summary
Fields Modifier and Type Field Description static intCACHED_POSITIONcached position count.static booleanCACHINGCaching on or off.static LengtheventMarginMargin to add to plan to check of the path will enter the next section.static LengthinitialLocationThresholdDifferenceThe threshold distance for differences between initial locations of the GTU on different lanes.static intNON_CACHED_POSITIONcached position count.Fields inherited from class org.opentrafficsim.core.gtu.AbstractGTU
ALIGN_COUNT, ALIGNED, operationalPlanFields inherited from interface org.djutils.event.EventProducerInterface
FIRST_POSITION, LAST_POSITIONFields inherited from interface org.opentrafficsim.core.gtu.GTU
DESTROY_EVENT, INIT_EVENT, MOVE_EVENTFields inherited from interface org.opentrafficsim.road.gtu.lane.LaneBasedGTU
LANE_CHANGE_EVENT, LANE_ENTER_EVENT, LANE_EXIT_EVENT, LANEBASED_DESTROY_EVENT, LANEBASED_INIT_EVENT, LANEBASED_MOVE_EVENT, LINK_ENTER_EVENT, LINK_EXIT_EVENT -
Constructor Summary
Constructors Constructor Description AbstractLaneBasedGTU2(java.lang.String id, GTUType gtuType, OTSSimulatorInterface simulator, OTSRoadNetwork network)Construct a Lane Based GTU. -
Method Summary
Modifier and Type Method Description voidaddTrigger(Lane lane, SimEventInterface<SimTimeDoubleUnit> event)Add an event to the list of lane triggers scheduled for this GTU.voidchangeLaneInstantaneously(LateralDirectionality laneChangeDirection)Change lanes instantaneously.voiddestroy()protected voidenterCrossSection()Appends a new cross-section at the downstream end.protected voidfinalizeLaneChange(LateralDirectionality laneChangeDirection)Performs the finalization of a lane change by leaving the from lanes.doublefractionalPosition(Lane lane, RelativePosition relativePosition)Return the longitudinal position of a point relative to this GTU, relative to the center line of the Lane, as a fraction of the length of the lane.doublefractionalPosition(Lane lane, RelativePosition relativePosition, Time when)Return the longitudinal position of a point relative to this GTU, relative to the center line of the Lane, as a fraction of the length of the lane.java.util.Map<Lane,java.lang.Double>fractionalPositions(RelativePosition relativePosition)Return the longitudinal positions of a point relative to this GTU, relative to the center line of the Lanes in which the vehicle is registered, as fractions of the length of the lane.java.util.Map<Lane,java.lang.Double>fractionalPositions(RelativePosition relativePosition, Time when)Return the longitudinal positions of a point relative to this GTU, relative to the center line of the Lanes in which the vehicle is registered, as fractions of the length of the lane.javax.media.j3d.BoundsgetBounds()AccelerationgetCarFollowingAcceleration()This method returns the current car-following acceleration of the GTU.SpeedgetDesiredSpeed()This method returns the current desired speed of the GTU.GTUDirectionalitygetDirection(Lane lane)Return the directionality of a lane on which the GTU is registered for its current operational plan.LengthgetLateralPosition(Lane lane)Returns the lateral position of the GTU relative to the lane center line.RoadNetworkgetNetwork()DirectedLanePositiongetReferencePosition()Return the current Lane, position and directionality of the GTU.LaneBasedStrategicalPlannergetStrategicalPlanner()LaneBasedStrategicalPlannergetStrategicalPlanner(Time time)TurnIndicatorStatusgetTurnIndicatorStatus()TurnIndicatorStatusgetTurnIndicatorStatus(Time time)VehicleModelgetVehicleModel()Returns the vehicle model.voidinit(LaneBasedStrategicalPlanner strategicalPlanner, java.util.Set<DirectedLanePosition> initialLongitudinalPositions, Speed initialSpeed)voidinitLaneChange(LateralDirectionality laneChangeDirection)Register on lanes in target lane.booleanisInstantaneousLaneChange()Returns whether the GTU perform lane changes instantaneously or not.protected voidleaveCrossSection()Removes registration between the GTU and the lanes in the most upstream cross-section.protected booleanmove(DirectedPoint fromLocation)Lengthposition(Lane lane, RelativePosition relativePosition)Return the longitudinal position of a point relative to this GTU, relative to the center line of the Lane at the current simulation time.Lengthposition(Lane lane, RelativePosition relativePosition, Time when)Return the longitudinal position of a point relative to this GTU, relative to the center line of the Lane.java.util.Map<Lane,Length>positions(RelativePosition relativePosition)Return the longitudinal positions of a point relative to this GTU, relative to the center line of the Lanes in which the vehicle is registered.java.util.Map<Lane,Length>positions(RelativePosition relativePosition, Time when)Return the longitudinal positions of a point relative to this GTU, relative to the center line of the Lanes in which the vehicle is registered.voidreinit(java.util.Set<DirectedLanePosition> initialLongitudinalPositions)Reinitializes the GTU on the network using the existing strategical planner and zero speed.protected voidscheduleEnterEvent()Checks whether the GTU will enter a next cross-section during the (remainder of) the tactical plan.protected voidscheduleLeaveEvent()Checks whether the GTU will leave a cross-section during the (remainder of) the tactical plan.protected voidscheduleTriggers(Lane lane, GTUDirectionality direction)Schedules all trigger events during the current operational plan on the lane.voidsetFinalizeLaneChangeEvent(SimEventInterface<SimTimeDoubleUnit> event)Sets event to finalize lane change.voidsetInstantaneousLaneChange(boolean instantaneous)Sets whether the GTU perform lane changes instantaneously or not.voidsetParent(GTU gtu)All lanes the GTU is on will be left.voidsetTurnIndicatorStatus(TurnIndicatorStatus turnIndicatorStatus)Set the status of the turn indicator.voidsetVehicleModel(VehicleModel vehicleModel)Sets a vehicle model.java.lang.StringtoString()Methods inherited from class org.opentrafficsim.core.gtu.AbstractGTU
addGtu, equals, getAcceleration, getAcceleration, getChildren, getErrorHandler, getGTUType, getId, getLocation, getMaximumAcceleration, getMaximumDeceleration, getNextMoveEvent, getOdometer, getOdometer, getOperationalPlan, getOperationalPlan, getParameters, getParent, getPerceivableContext, getReference, getSimulator, getSourceId, getSpeed, getSpeed, hashCode, init, interruptMove, isDestroyed, removeGtu, setErrorHandler, setMaximumAcceleration, setMaximumDeceleration, setParametersMethods inherited from class org.djutils.event.EventProducer
addListener, addListener, addListener, addListener, fireEvent, fireEvent, fireEvent, fireEvent, fireEvent, fireEvent, fireEvent, fireEvent, fireEvent, fireEvent, fireTimedEvent, fireTimedEvent, fireTimedEvent, fireTimedEvent, fireTimedEvent, fireTimedEvent, fireTimedEvent, getEventTypesWithListeners, hasListeners, numberOfListeners, removeAllListeners, removeAllListeners, removeListenerMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface org.djutils.event.EventProducerInterface
addListener, addListener, addListener, addListener, getEventTypesWithListeners, getSourceId, hasListeners, numberOfListeners, removeListenerMethods inherited from interface org.opentrafficsim.core.gtu.GTU
addGtu, getAcceleration, getAcceleration, getCenter, getChildren, getContourPoints, getFront, getGTUType, getId, getLength, getMaximumAcceleration, getMaximumDeceleration, getMaximumSpeed, getOdometer, getOdometer, getOperationalPlan, getOperationalPlan, getParameters, getParent, getPerceivableContext, getRear, getReference, getRelativePositions, getSimulator, getSpeed, getSpeed, getWidth, isDestroyed, removeGtu, setErrorHandler, setParametersMethods inherited from interface org.opentrafficsim.road.gtu.lane.LaneBasedGTU
getLocation, getProjectedLength, getTacticalPlanner, getTacticalPlanner, isBrakingLightsOn, isBrakingLightsOn, laneChangeAllowed, setNoLaneChangeDistance
-
Field Details
-
initialLocationThresholdDifference
The threshold distance for differences between initial locations of the GTU on different lanes. -
eventMargin
Margin to add to plan to check of the path will enter the next section. -
CACHING
public static boolean CACHINGCaching on or off. -
CACHED_POSITION
public static int CACHED_POSITIONcached position count. -
NON_CACHED_POSITION
public static int NON_CACHED_POSITIONcached position count.
-
-
Constructor Details
-
AbstractLaneBasedGTU2
public AbstractLaneBasedGTU2(java.lang.String id, GTUType gtuType, OTSSimulatorInterface simulator, OTSRoadNetwork network) throws GTUExceptionConstruct a Lane Based GTU.- Parameters:
id- String; the id of the GTUgtuType- GTUType; the type of GTU, e.g. TruckType, CarType, BusTypesimulator- OTSSimulatorInterface; to initialize the move method and to get the current timenetwork- OTSRoadNetwork; the network that the GTU is initially registered in- Throws:
GTUException- when initial values are not correct
-
-
Method Details
-
init
public void init(LaneBasedStrategicalPlanner strategicalPlanner, java.util.Set<DirectedLanePosition> initialLongitudinalPositions, Speed initialSpeed) throws NetworkException, SimRuntimeException, GTUException, OTSGeometryException- Parameters:
strategicalPlanner- LaneBasedStrategicalPlanner; the strategical planner (e.g., route determination) to useinitialLongitudinalPositions- Set<DirectedLanePosition>; the initial positions of the car on one or more lanes with their directionsinitialSpeed- Speed; the initial speed of the car on the lane- Throws:
NetworkException- when the GTU cannot be placed on the given laneSimRuntimeException- when the move method cannot be scheduledGTUException- when initial values are not correctOTSGeometryException- when the initial path is wrong
-
setParent
All lanes the GTU is on will be left.- Specified by:
setParentin interfaceGTU- Overrides:
setParentin classAbstractGTU- Throws:
GTUException
-
reinit
public void reinit(java.util.Set<DirectedLanePosition> initialLongitudinalPositions) throws NetworkException, SimRuntimeException, GTUException, OTSGeometryExceptionReinitializes the GTU on the network using the existing strategical planner and zero speed.- Parameters:
initialLongitudinalPositions- Set<DirectedLanePosition>; initial position- Throws:
NetworkException- when the GTU cannot be placed on the given laneSimRuntimeException- when the move method cannot be scheduledGTUException- when initial values are not correctOTSGeometryException- when the initial path is wrong
-
changeLaneInstantaneously
public void changeLaneInstantaneously(LateralDirectionality laneChangeDirection) throws GTUExceptionChange lanes instantaneously.- Specified by:
changeLaneInstantaneouslyin interfaceLaneBasedGTU- Parameters:
laneChangeDirection- LateralDirectionality; the direction to change to- Throws:
GTUException- in case lane change fails
-
initLaneChange
Register on lanes in target lane.- Specified by:
initLaneChangein interfaceLaneBasedGTU- Parameters:
laneChangeDirection- LateralDirectionality; direction of lane change- Throws:
GTUException- exception
-
finalizeLaneChange
Performs the finalization of a lane change by leaving the from lanes.- Parameters:
laneChangeDirection- LateralDirectionality; direction of lane change- Throws:
GTUException- if position or direction could not be obtained
-
setFinalizeLaneChangeEvent
Sets event to finalize lane change.- Specified by:
setFinalizeLaneChangeEventin interfaceLaneBasedGTU- Parameters:
event- SimEventInterface<SimTimeDoubleUnit>; event
-
getDirection
Return the directionality of a lane on which the GTU is registered for its current operational plan.- Specified by:
getDirectionin interfaceLaneBasedGTU- Parameters:
lane- Lane; the lane for which we want to know the direction- Returns:
- GTUDirectionality; the direction on the given lane
- Throws:
GTUException- in case the GTU is not registered on the Lane
-
move
protected boolean move(DirectedPoint fromLocation) throws SimRuntimeException, GTUException, OperationalPlanException, NetworkException, ParameterException- Overrides:
movein classAbstractGTU- Throws:
SimRuntimeExceptionGTUExceptionOperationalPlanExceptionNetworkExceptionParameterException
-
scheduleEnterEvent
protected void scheduleEnterEvent() throws GTUException, OperationalPlanException, SimRuntimeExceptionChecks whether the GTU will enter a next cross-section during the (remainder of) the tactical plan. Only one event will be scheduled. Possible additional events are scheduled upon entering the cross-section.- Throws:
GTUException- exceptionOperationalPlanException- exceptionSimRuntimeException- exception
-
enterCrossSection
protected void enterCrossSection() throws GTUException, OperationalPlanException, SimRuntimeExceptionAppends a new cross-section at the downstream end. Possibly schedules a next enter event.- Throws:
GTUException- exceptionOperationalPlanException- exceptionSimRuntimeException- exception
-
scheduleLeaveEvent
protected void scheduleLeaveEvent() throws GTUException, OperationalPlanException, SimRuntimeExceptionChecks whether the GTU will leave a cross-section during the (remainder of) the tactical plan. Only one event will be scheduled. Possible additional events are scheduled upon leaving the cross-section.- Throws:
GTUException- exceptionOperationalPlanException- exceptionSimRuntimeException- exception
-
leaveCrossSection
protected void leaveCrossSection() throws GTUException, OperationalPlanException, SimRuntimeExceptionRemoves registration between the GTU and the lanes in the most upstream cross-section. Possibly schedules a next leave event.- Throws:
GTUException- exceptionOperationalPlanException- exceptionSimRuntimeException- exception
-
scheduleTriggers
protected void scheduleTriggers(Lane lane, GTUDirectionality direction) throws GTUException, OperationalPlanException, SimRuntimeExceptionSchedules all trigger events during the current operational plan on the lane.- Parameters:
lane- Lane; lanedirection- GTUDirectionality; direction- Throws:
GTUException- exceptionOperationalPlanException- exceptionSimRuntimeException- exception
-
positions
public final java.util.Map<Lane,Length> positions(RelativePosition relativePosition) throws GTUExceptionReturn the longitudinal positions of a point relative to this GTU, relative to the center line of the Lanes in which the vehicle is registered.
Note: If a GTU is registered in multiple parallel lanes, the lateralLaneChangeModel is used to determine the center line of the vehicle at this point in time. Otherwise, the average of the center positions of the lines will be taken.- Specified by:
positionsin interfaceLaneBasedGTU- Parameters:
relativePosition- RelativePosition; the position on the vehicle relative to the reference point.- Returns:
- the lanes and the position on the lanes where the GTU is currently registered, for the given position of the GTU.
- Throws:
GTUException- when the vehicle is not on one of the lanes on which it is registered.
-
positions
public final java.util.Map<Lane,Length> positions(RelativePosition relativePosition, Time when) throws GTUExceptionReturn the longitudinal positions of a point relative to this GTU, relative to the center line of the Lanes in which the vehicle is registered.- Specified by:
positionsin interfaceLaneBasedGTU- Parameters:
relativePosition- RelativePosition; the position on the vehicle relative to the reference point.when- Time; the future time for which to calculate the positions.- Returns:
- the lanes and the position on the lanes where the GTU will be registered at the time, for the given position of the GTU.
- Throws:
GTUException- when the vehicle is not on one of the lanes on which it is registered.
-
position
Return the longitudinal position of a point relative to this GTU, relative to the center line of the Lane at the current simulation time.- Specified by:
positionin interfaceLaneBasedGTU- Parameters:
lane- Lane; the position on this lane will be returned.relativePosition- RelativePosition; the position on the vehicle relative to the reference point.- Returns:
- DoubleScalarAbs<LengthUnit>; the position, relative to the center line of the Lane.
- Throws:
GTUException- when the vehicle is not on the given lane.
-
position
public Length position(Lane lane, RelativePosition relativePosition, Time when) throws GTUExceptionReturn the longitudinal position of a point relative to this GTU, relative to the center line of the Lane.- Specified by:
positionin interfaceLaneBasedGTU- Parameters:
lane- Lane; the position on this lane will be returned.relativePosition- RelativePosition; the position on the vehicle relative to the reference point.when- Time; the future time for which to calculate the positions.- Returns:
- DoubleScalarAbs<LengthUnit>; the position, relative to the center line of the Lane.
- Throws:
GTUException- when the vehicle is not on the given lane.
-
getReferencePosition
Return the current Lane, position and directionality of the GTU.- Specified by:
getReferencePositionin interfaceLaneBasedGTU- Returns:
- DirectedLanePosition; the current Lane, position and directionality of the GTU
- Throws:
GTUException- in case the reference position of the GTU cannot be found on the lanes in its current path
-
fractionalPositions
public final java.util.Map<Lane,java.lang.Double> fractionalPositions(RelativePosition relativePosition) throws GTUExceptionReturn the longitudinal positions of a point relative to this GTU, relative to the center line of the Lanes in which the vehicle is registered, as fractions of the length of the lane. This is important when we want to see if two vehicles are next to each other and we compare an 'inner' and 'outer' curve.- Specified by:
fractionalPositionsin interfaceLaneBasedGTU- Parameters:
relativePosition- RelativePosition; the position on the vehicle relative to the reference point.- Returns:
- the lanes and the position on the lanes where the GTU is currently registered, for the given position of the GTU.
- Throws:
GTUException- when the vehicle is not on one of the lanes on which it is registered.
-
fractionalPositions
public final java.util.Map<Lane,java.lang.Double> fractionalPositions(RelativePosition relativePosition, Time when) throws GTUExceptionReturn the longitudinal positions of a point relative to this GTU, relative to the center line of the Lanes in which the vehicle is registered, as fractions of the length of the lane. This is important when we want to see if two vehicles are next to each other and we compare an 'inner' and 'outer' curve.- Specified by:
fractionalPositionsin interfaceLaneBasedGTU- Parameters:
relativePosition- RelativePosition; the position on the vehicle relative to the reference point.when- Time; the future time for which to calculate the positions.- Returns:
- the lanes and the position on the lanes where the GTU will be registered at the time, for the given position of the GTU.
- Throws:
GTUException- when the vehicle is not on one of the lanes on which it is registered.
-
fractionalPosition
public final double fractionalPosition(Lane lane, RelativePosition relativePosition, Time when) throws GTUExceptionReturn the longitudinal position of a point relative to this GTU, relative to the center line of the Lane, as a fraction of the length of the lane. This is important when we want to see if two vehicles are next to each other and we compare an 'inner' and 'outer' curve.- Specified by:
fractionalPositionin interfaceLaneBasedGTU- Parameters:
lane- Lane; the position on this lane will be returned.relativePosition- RelativePosition; the position on the vehicle relative to the reference point.when- Time; the future time for which to calculate the positions.- Returns:
- the fractional relative position on the lane at the given time.
- Throws:
GTUException- when the vehicle is not on the given lane.
-
fractionalPosition
public final double fractionalPosition(Lane lane, RelativePosition relativePosition) throws GTUExceptionReturn the longitudinal position of a point relative to this GTU, relative to the center line of the Lane, as a fraction of the length of the lane. This is important when we want to see if two vehicles are next to each other and we compare an 'inner' and 'outer' curve.- Specified by:
fractionalPositionin interfaceLaneBasedGTU- Parameters:
lane- Lane; the position on this lane will be returned.relativePosition- RelativePosition; the position on the vehicle relative to the reference point.- Returns:
- the fractional relative position on the lane at the given time.
- Throws:
GTUException- when the vehicle is not on the given lane.
-
addTrigger
Add an event to the list of lane triggers scheduled for this GTU.- Specified by:
addTriggerin interfaceLaneBasedGTU- Parameters:
lane- Lane; the lane on which the event occursevent- SimEventInterface<SimTimeDoubleUnit>; SimeEvent<SimTimeDoubleUnit> the event
-
setVehicleModel
Sets a vehicle model.- Parameters:
vehicleModel- VehicleModel; vehicle model
-
getVehicleModel
Returns the vehicle model.- Specified by:
getVehicleModelin interfaceLaneBasedGTU- Returns:
- VehicleModel; vehicle model
-
destroy
public void destroy()- Specified by:
destroyin interfaceGTU- Overrides:
destroyin classAbstractGTU
-
getBounds
public final javax.media.j3d.Bounds getBounds() -
getStrategicalPlanner
- Specified by:
getStrategicalPlannerin interfaceGTU- Specified by:
getStrategicalPlannerin interfaceLaneBasedGTU- Overrides:
getStrategicalPlannerin classAbstractGTU
-
getStrategicalPlanner
- Specified by:
getStrategicalPlannerin interfaceGTU- Specified by:
getStrategicalPlannerin interfaceLaneBasedGTU- Overrides:
getStrategicalPlannerin classAbstractGTU
-
getNetwork
- Specified by:
getNetworkin interfaceLaneBasedGTU- Returns:
- the road network to which the LaneBasedGTU belongs
-
getDesiredSpeed
This method returns the current desired speed of the GTU. This value is required often, so implementations can cache it.- Specified by:
getDesiredSpeedin interfaceLaneBasedGTU- Returns:
- Speed; current desired speed
-
getCarFollowingAcceleration
This method returns the current car-following acceleration of the GTU. This value is required often, so implementations can cache it.- Specified by:
getCarFollowingAccelerationin interfaceLaneBasedGTU- Returns:
- Acceleration; current car-following acceleration
-
getTurnIndicatorStatus
- Specified by:
getTurnIndicatorStatusin interfaceLaneBasedGTU- Returns:
- the status of the turn indicator
-
getTurnIndicatorStatus
- Specified by:
getTurnIndicatorStatusin interfaceLaneBasedGTU- Parameters:
time- Time; time to obtain the turn indicator status at- Returns:
- the status of the turn indicator at the given time
-
setTurnIndicatorStatus
Set the status of the turn indicator.- Specified by:
setTurnIndicatorStatusin interfaceLaneBasedGTU- Parameters:
turnIndicatorStatus- TurnIndicatorStatus; the new status of the turn indicator.
-
getLateralPosition
Returns the lateral position of the GTU relative to the lane center line. Negative values are towards the right.- Specified by:
getLateralPositionin interfaceLaneBasedGTU- Parameters:
lane- Lane; lane to consider (most important regarding left/right, not upstream downstream)- Returns:
- Length; lateral position of the GTU relative to the lane center line
- Throws:
GTUException- when the vehicle is not on the given lane.
-
setInstantaneousLaneChange
public void setInstantaneousLaneChange(boolean instantaneous)Sets whether the GTU perform lane changes instantaneously or not.- Specified by:
setInstantaneousLaneChangein interfaceLaneBasedGTU- Parameters:
instantaneous- boolean; whether the GTU perform lane changes instantaneously or not
-
isInstantaneousLaneChange
public boolean isInstantaneousLaneChange()Returns whether the GTU perform lane changes instantaneously or not.- Specified by:
isInstantaneousLaneChangein interfaceLaneBasedGTU- Returns:
- boolean; whether the GTU perform lane changes instantaneously or not
-
toString
public java.lang.String toString()- Overrides:
toStringin classjava.lang.Object
-