    /**
     * @param \MVC\DataType\DTValue $oDTValue
     * @return \MVC\DataType\DTValue
     * @throws \ReflectionException
     */
    protected function setProperties(DTValue $oDTValue)
    {
        $aData = $oDTValue->get_mValue();

        foreach ($aData as $sKey => $mValue)
        {
            $sType = $this->getDocCommentValueOfProperty($sKey);
            $sVar = $aData[$sKey];
            settype($sVar, $sType);
            $aData[$sKey] = $sVar;

            if ('string' === $sType)
            {
                $aData[$sKey] = (string) $aData[$sKey];
            }
            elseif ('int' === $sType || 'integer' === $sType)
            {
                $aData[$sKey] = (int) $aData[$sKey];
            }
            elseif ('bool' === $sType || 'boolean' === $sType)
            {
                $aData[$sKey] = (boolean) $aData[$sKey];
            }
            elseif ('float' === $sType)
            {
                $aData[$sKey] = (float) $aData[$sKey];
            }
            elseif ('double' === $sType)
            {
                $aData[$sKey] = (float) $aData[$sKey];
            }
            elseif ('array' === $sType)
            {
                $aData[$sKey] = (array) $aData[$sKey];
            }

            $sMethod = 'set_' . $sKey;
            $this->$sMethod($aData[$sKey]);
        }

        $oDTValue->set_mValue($aData);

        return $oDTValue;
    }