gpt4 book ai didi

java - 泛型可以推断出相关类型吗?

转载 作者:行者123 更新时间:2023-12-02 03:50:37 25 4
gpt4 key购买 nike

给定

public class Foo {
public static class FooBuilder { ... }
}

我想在第三个类上编写一个返回 Foo 的方法,给定 Foo.FooBuilder.class

Foo f = x.make(Foo.FooBuilder.class, someData);

是否可以使用可以暗示返回类型的泛型来声明签名?是否有某种语言功能可以让我说“U 型是 T 型的外部类”?

显然,可以指定类型扩展泛型类型,或者是泛型类型的基础(分别为U extends TU super T),但我我正在寻找U external T,我认为这比 Java 能够提供的更多,甚至是间接的,至少在我的目标 1.7 中是这样。

到目前为止,我只是声明了内部类型和外部类型,这可以工作,但定义比我想要的更广泛,而且看起来也很笨拙。

public <TYPE,BUILDER> TYPE make(Class<BUILDER> builderClass, Map<String,Object> data) {
// Construct TYPE
}

有没有一种方法可以在不显式提供模板参数的情况下推断类型?

最佳答案

有一个Class#getDeclaringClass可能适合您的情况的方法。引用文档:

If the class or interface represented by this Class object is a member of another class, returns the Class object representing the class in which it was declared.

编辑:

在OP澄清之后,这是新的建议:

您创建一个通用接口(interface)来标记所有嵌套类:

public interface Nested<P> {

}

然后将其应用到您的 Foo.Bar 类,如下所示:

public class Foo {

public static class Bar implements Nested<Foo> {

}

}

然后在您的工厂中您可以拥有以下内容:

public <P> P make(Class<? extends Nested<P>> clazz, Map<String, Object> someData) {
// do whatever you need to do
return (P) clazz.getDeclaringClass();
}

但是,使用此构造,无法验证您的嵌套类是否是在实现通用接口(interface)时声明的真实类。

关于java - 泛型可以推断出相关类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35922144/

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