作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个通用函数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()
),这可能不是您想要做的。否则,此类模式将与静态方法一起使用(假设这是合理的),其中 T
的Foo
不适用。
这就是说,您的代码可能如下所示,如果 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/
我是一名优秀的程序员,十分优秀!