"""
Python module generated from Java source file com.google.common.collect.ForwardingObject

Java source file obtained from artifact guava version 33.3.1-jre

Because this Python module is automatically generated, it may contain errors
and/or code that cannot be parsed. Please report these issues at
https://github.com/magicmq/docs-translator/issues
"""
from com.google.common.annotations import GwtCompatible
from com.google.common.collect import *
from java.io import Serializable
from typing import Any, Callable, Iterable, Tuple


class ForwardingObject:
    """
    An abstract base class for implementing the <a
    href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>. The .delegate() method must be overridden to return the instance being decorated.
    
    This class does *not* forward the `hashCode` and `equals` methods through to
    the backing object, but relies on `Object`'s implementation. This is necessary to preserve
    the symmetry of `equals`. Custom definitions of equality are usually based on an interface,
    such as `Set` or `List`, so that the implementation of `equals` can cast the
    object being tested for equality to the custom interface. `ForwardingObject` implements no
    such custom interfaces directly; they are implemented only in subclasses. Therefore, forwarding
    `equals` would break symmetry, as the forwarding object might consider itself equal to the
    object being tested, but the reverse could not be True. This behavior is consistent with the
    JDK's collection wrappers, such as java.util.Collections.unmodifiableCollection. Use an
    interface-specific subclass of `ForwardingObject`, such as ForwardingList, to
    preserve equality behavior, or override `equals` directly.
    
    The `toString` method is forwarded to the delegate. Although this class does not
    implement Serializable, a serializable subclass may be created since this class has a
    parameter-less constructor.

    Author(s)
    - Mike Bostock

    Since
    - 2.0
    """

    def toString(self) -> str:
        """
        Returns the string representation generated by the delegate's `toString` method.
        """
        ...
