java - 调用不带参数的泛型函数

标签 java generics

我有一个通用函数baz不带参数并希望从另一个成员函数 helper 调用它。我想在调用函数时指定类型。我尝试做 baz<T>()但这没有编译。我能够编译它的唯一方法是这样的:

class Foo<T> {
  public Foo<?> helper() {
    return baz();
  }

  public <R> Foo<R> baz() {
    return new Foo<R>();
  }
}

这是如何编译的? baz是什么类型返回?顺便说一句,我有 C++ 背景。

最佳答案

首先,有一个快速解决方案来回答您的直接问题。以下是您如何指定 R 的类型里面helper() :

public Foo<?> helper() {
    return this.<String>baz(); //R forced to be String, change to what you want
}

现在,有一个旁注:

使用泛型类型的实例方法为同一个类声明不同的类型参数是很奇怪的。除非你的baz方法清楚地指示了转换并将控制权留给了调用者(如 stream.map() ),这可能不是您想要做的。否则,此类模式将与静态方法一起使用(假设这是合理的),其中 TFoo不适用。

这就是说,您的代码可能如下所示,如果 helper()旨在转变 Foo<T>进入一些Foo<R> :

class Foo<T> {
    // converting this Foo<T> to Foo<R>
    // Normally, helper() would take a parameter related to T
    public <U> Foo<U> helper() {
        return Foo.<U>baz();
    }

    // Making a Foo<R>, R is not related to T
    public static <R> Foo<R> baz() {
        return new Foo<R>();
    }
}

关于java - 调用不带参数的泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59691463/

相关文章:

java - 保存对象以供将来使用

Java 泛型类 - 确定类型

java - 如何在 map 中使用通用类型?

java - 创建循环通用引用

java - 如何向 GUI 添加一个 "console"之类的窗口?

java - 如何将 JRMapCollectionDataSource 与字段和列表一起使用?

java - Android Studio 中的 Google Maps v2。未找到 GeoPoint

java - 为什么线程共享堆空间?

java - 对于泛型和原始类型都是可迭代的

java - 有没有办法将默认构造函数添加到接口(interface)