当我不知道泛型类型时,如何将其传递给方法?

public static class ExecContext<E> {

    public void doSomething(E e) {

        System.out.println(e);
    }
}

public static void exec(ExecContext<?> ctx) {

    String s = new String("saoj");

    ctx.doSomething(s); // <============== COMPILE ERROR
}

最佳答案

public static <T> void exec(ExecContext<T> ctx)

应该这样做。

编辑:

这应该可以做到。。。但是,您的操作方式略有变化:
public class Main
{
    public static void main(String[] args)
    {
        final ExecContext<String>  stringCtx;
        final ExecContext<Integer> integerCtx;

        stringCtx  = new ExecContext<String>();
        integerCtx = new ExecContext<Integer>();
        exec(stringCtx, "Hello, World");
        exec(integerCtx, 42);
    }

    public static class ExecContext<T>
    {
        public void doSomething(final T e)
        {
            System.out.println(e);
        }
    }

    public static <T> void exec(final ExecContext<T> ctx,
                                final T              value)
    {
        ctx.doSomething(value);
    }
}

10-05 23:04