java templating如何显式指定在已命名的类上使用参数变量?

Axo*_*ren 0 java generics

public abstract class InterruptableEvaluator<State> {
    public abstract evaluate(State state);
    public abstract haltEvaluation();

    private final class EvaluationThread extends Thread {
        private State state;

        public EvaluationThread(State state) {
            this.state = state;
        }

        @Override
        public void run() {
            evaluate(state);
            haltEvaluation();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题在于:

        @Override
        public void run() {
            evaluate(state);
            haltEvaluation();
        }
Run Code Online (Sandbox Code Playgroud)

该对象state被视为一个java.lang.Thread.State对象,而不是使用参数InterruptableEvaluator.

如何明确告诉Java使用参数变量而不是java.lang.Thread.State?

ζ--*_*ζ-- 6

为简洁起见,泛型通常包含单个字母用于类型参数,并且由于缺少使用单个字母命名的真正类.更改State为S参数中不是现有类/接口的任何其他有效类型名称以及它所使用的任何位置,您应该没问题.

  • 考虑将通用参数命名为单个字母是标准的,虽然它现在看起来可能更难以阅读,但其他人已经发现单个字母更容易,并且您也会及时.而且,如果泛型参数看起来像一个类名,它实际上变得非常令人困惑*因为你的代码的读者在使用时可能没有意识到它是一个通用参数.最好保持标准. (2认同)