gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:20:21 24 4
gpt4 key购买 nike

我有一个通用函数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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com