1: You use a different formal type parameter for the method from the class.
2: You don't instantiate the class as a raw type.
3: You pass something which allows the method to infer its actual type parameter as an argument to it.
You are confusing yourself by making the method generic and the class generic and giving them both the same formal type parameter T. Is the return type from that method the same as the actual type parameter of the class? (Probably not.) Why have you made the method generic in the first place? I am pretty sure you don't want both the method and the class parametrised.
In the immortal words of Charlie Brown, “Good grief!”
What on earth is that code supposed to mean? Please tell us exactly what goes wrong. For a start, how did you get line 24 to compile?
Well, you're calling foo.calculate() with the type argument Customer. That means that the calculate() method is going to cast the result of findValue() to Customer. findValue() returns Class<Customer>, which is not compatible with Customer, so you get a ClassCastException.