Make a Java class generic, but only for two or three types

后端 未结 7 517
清歌不尽
清歌不尽 2021-01-11 19:17

(I was astonished not to be able to find this question already on stackoverflow, which I can only put down to poor googling on my part, by all means point out the duplicate.

7条回答
  •  长发绾君心
    2021-01-11 19:37

    Various ways to do what you need...Here is another option. No getter or setter.
    One instance of Mirror for each type to be handled. One reverse() method. Tweak as necessary. Add error checking/handling.

    public class Mirror {
    
    public T reverse(final T value) {
        T result = null;
        while (true) {
            if (value instanceof String) {
                System.out.println("Do for String");
                result = value;
                break;
            }
            if (value instanceof Integer) {
                System.out.println("Do for Integer");
                result = value;
                break;
            }
            if (value instanceof JFrame) {
                System.out.println("Do for JFrame");
                result = value;
                break;
            }
            throw new RuntimeException("ProgramCheck: Missing handler for type " + value.getClass().getSimpleName());
        }
        return result;
    }
    

    Tester:

        final Mirror testerString = new Mirror<>();
        testerString.reverse("string");
    
        final Mirror testerInteger = new Mirror<>();
        testerInteger.reverse(41);
        testerInteger.reverse(42);
        testerInteger.reverse(43);
    
        final Mirror testerJFrame = new Mirror<>();
        testerJFrame.reverse(new JFrame());
    

    Results:

    Do for String
    Do for Integer
    Do for Integer
    Do for Integer
    Do for JFrame
    

提交回复
热议问题