Where did your son come home from, when he had that bruise on his back??? From Preschool? From that kid's house?
In either case, YOU need to speak up to the adult in charge, and tell her/him what happened.
Sure, teach your kiddo to speak up.
But at 4 years old, the parent, You, DOES have to handle it, too. A 4 year old is too young to completely deal with it on their own. They are not even fully socialized yet etc.
AND, you NEED TO teach your son, the difference between right and wrong. Mean and nice. Start now, teaching him that. SO that, once he enters into Elementary school, he will know, what the difference is and how to TELL the Teacher, and speak up etc.
And, when YOU see it happening, you TELL that boy... stop it, that is wrong. It HURTS people when you throw things.
Don't just observe and let it happen.
TELL that boy, that that is not nice.
It doesn't matter if he threw it out of maliciousness or not... the point is: throwing things AT people, is wrong. It hurts others. It is NOT nice.
If that boy did that in school, he would be reprimanded.
Your son has a bruise now.
You need to tell that boy's Mom.
Or the Teacher if it happened at Preschool.
It is not all your son's responsibility to use his words and say he doesn't like it when his friend does that. He is only 4. You need to, also, handle it. To the boy or tell his Mom.
Again, throwing things at people, even if that boy is just "playing" is NOT nice. And it will not be allowed in any school setting.
As you see, your son got hurt already. Just because his friend "loves to throw things." Well THAT, needs to stop.
Throwing and flinging objects at others, is just not nice.
When my son was 4, he didn't throw things at people. He knew, it was wrong and that it hurts.