oh you satan you <| sep |> Deputy Marc Alan Smith was indicted by a grand jury this week on charges of luring a minor , sex abuse , invasion of personal privacy , private indecency , online sex corruption of a child and misconduct . We are getting story after story of the people we hire to prevent crime being the very ones who are committing crimes . Is there no end in site to police breaking laws ? One has to wonder how many people this officer has arrested who may have broke laws but didn ' t harm anyone or take anyone ' s stuff , yet ended up in prison . This deputy ' s actions harmed a child yet one has to wonder if he will ever see a day behind bars . <| sep |> I would say Polymorphism would be a good approach , but I have no idea how much refactoring scrapping your enum would cause and it is hard to say without seeing the full picture . Instead of using an enum for the block type , just stick the logic in the appropriate Material class . The Material class should be abstract and be implemented by each type i . e . dirt , sand , etc . . That way you could just call something like return new ItemStackblock . getDropchance and abstract your logic to the individual classes . This has the benefit of making your code much more extensible i . e . if you wanted to add a new block type , no rewriting of this method , and others , would be required . The solution you posted seems a bit overkill to me , I would just handle it with a switch statement in each class . It doesn ' t save you any lines , costs you memory , and somewhat obfuscates the code in my opinion anyways .