当前位置: 首页 > 面试题库 >

Java中令牌的含义是什么?

仲浩歌
2023-03-14
问题内容

<?>从www.JavaPractices.com复制的此代码中的令牌是什么意思?当我用更<T>通用的泛型类型替换它时,它无法编译。(错误:T无法解析为类型。)为什么?

// <?> 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;
}

编辑:当然,当我们使用类似的通用类型标记时<T>,它必须出现在类声明中。这里也没有<T>,也没有<?>在类的声明,但它仍然可以编译和运行正常。


问题答案:

它无法编译,因为您的类不是通用的(也不是您的任何方法)。在此特定示例中,小丑(?)表示ScheduledFuture可以由任何参数设置。

有时,如果您在内部使用另一个泛型类并且不知道将使用的确切类型,则使整个类成为泛型是没有意义的。在此示例中,您有三个选择:

  1. 使StopAlarmTask通用(在这种情况下没有意义)
  2. 在ScheduledFuture中使用具体类型,但是它只会是一种可能的结果类型,例如String或Integer
  3. 使用通配符(< ? >)-允许检索FutureResult(字符串,整数,自定义类)的结果。您还可以将可能的泛型类型的范围缩小为某些子类,例如ScheduledGeneric< ? extends MyObject >或为超类:ScheduledGeneric< ? super MyObject >


 类似资料:
  • 问题内容: Java中“ this”的含义是什么? 问题答案: this 指当前对象 每个非静态方法都在对象的上下文中运行。因此,如果你有这样的课程: 然后调用上会打印 因此,有效地将它用于多种用途: 澄清你在谈论一个字段,当还有其他与该字段同名的东西时 整体引用当前对象 在构造函数中调用当前类的其他构造函数

  • 问题内容: 这个静态函数是来自名称空间的类中的吗? 我该如何解释这个名字?在JRE中的哪个位置定义了此功能?在/ ? 问题答案: 否。实际上是类中的静态成员(不是.NET中的静态成员),它是。的实例。并且是该类的常规(重载)方法。 请参阅http://download.oracle.com/javase/6/docs/api/java/lang/System.html#out。 其实,如果/ /

  • 问题内容: 我迅速在Google上找到了答案,但找不到/认为准确的搜索参数。 我正在自学Java,但似乎找不到某种语法的含义。 这意味着什么?我模糊地记得箭头括号与向量有关,但是根据上面的代码,我感觉到它与枚举有关。 任何帮助或澄清将不胜感激。谢谢。 问题答案: 这些称为泛型。 通常,这些在定义类,接口和方法时使 类型 (类和接口)成为参数。 与使用非泛型代码相比,使用泛型有很多好处,如Java教

  • 在新的Firebase中,在Notification下,他们提到开发者可以向特定设备发送通知。为此,它在控制台中请求FCM令牌。它到底是什么?我怎样才能得到那个令牌?

  • 问题内容: 这段代码在: 最后一行使我感到非常困惑。我不知道的意思。 这些是其他代码: 结果是 我猜想的功能是从中选择所有元素,但是我还没有找到正式的解释。它是什么? 问题答案: builtin.go中的代码用作文档。该代码未编译。 在指出这个函数的最后一个参数是可变参数。可变参数在Go语言规范中进行了说明。 该类型的部分为任何围棋类型替身。

  • 问题内容: 我是Golang的新手,正在做http://tour.golang.org/。谁能向我解释 第1、3、5和7行, 特别是’*’和’&’的作用吗?我的意思是通过在函数声明中提及它们,它们应该/应该做什么?一个玩具的例子: 看起来它们就像我们在C ++中一样。但是我无法将这些概念与此处的内容联系起来。换句话说,当我在Go的函数声明中使用“ *”和“&”时,它们会做什么。 编辑: 我知道引用