What is the meaning of the <?> token in this code copied from www.JavaPractices.com?  When I replace it with the more conventional looking <T> used for generic types, it fails to compile.  (Error: T cannot be resolved to a type.)  Why?
// <?> occurs 3 times in the entire program.  When it is replaced with <T> the
// program no longer compiles.
void activateAlarmThenStop()
{
    Runnable myPeriodicTask = new PeriodicTask();
    ScheduledFuture<?> soundAlarmFuture = 
        this.executorService.scheduleWithFixedDelay(myPeriodicTask, 
                                          startT, 
                                          period, 
                                          TimeUnit.SECONDS
                                         );
    Runnable stopAlarm = new StopAlarmTask(soundAlarmFuture);
    this.executorService.schedule(stopAlarm, stopT, TimeUnit.SECONDS);
}
private final class StopAlarmTask implements Runnable 
{
    StopAlarmTask(ScheduledFuture<?> aSchedFuture)
    {
        fSchedFuture = aSchedFuture;
    }
    public void run() 
    {
        CConsole.pw.println("Stopping alarm.");
        fSchedFuture.cancel(doNotInterruptIfRunningFlag);
        executorService.shutdown();
    }
    private ScheduledFuture<?> fSchedFuture;
}
Edit: Of course when we use generic type tokens like <T>, it has to appear in the class declaration.  Here there is no <T> nor <?> in the class declaration but it still compiles and runs properly.
 
     
     
     
     
     
     
     
    