首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未单独指定用于实例化的Java类范围的泛型类型

未单独指定用于实例化的Java类范围的泛型类型
EN

Stack Overflow用户
提问于 2012-11-09 17:11:37
回答 2查看 345关注 0票数 3

可能重复: Is it possible to reference a nested generic parameter in java?

一个关于Java泛型的快速问题(如果可以的话)。是否有用于声明不用作实例化的泛型参数的泛型类范围类型的语法。例如:

代码语言:javascript
运行
复制
public class <U extends FooUType> BarType<T extends FooType<U>>{

   public U getU(){return U;}
}

要创建一个BarType,我想编写以下内容,它本身包含U,但我不想单独指定U。所以:

代码语言:javascript
运行
复制
BarType<SomeT<FooUType>> instance

我们从参数化的SomeT中隐式地得到U的类型,而不必分别指定U。相对于:

代码语言:javascript
运行
复制
public class BarType<U extends FooUType, T extends FooType<U>> 

这将需要:

代码语言:javascript
运行
复制
BarType<FooUType,SomeT<FooUType>>

我想我是在寻找方法上类似于相同想法的东西:

代码语言:javascript
运行
复制
public <U> boolean StupidMethod(String s){
    ...
}

我不想使用<? extends FooUType>,因为这会导致返回<U extends FooUType> U的类中的方法返回类型出现问题。

非常感谢您的澄清!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-12 10:17:23

谢谢大家,

最后我想找一个不同的解决方案。基本上,我试图隐藏U的类是抽象的,因此我添加了U作为泛型参数,因为这是无法避免的。然后我创建了具体的类来扩展它,并让它们静默地填写U类型,这样调用者就不需要膨胀它们的代码了。

就像这样:

代码语言:javascript
运行
复制
public abstract class MyAbsClass<U extends Foo, T extends Bar<U>>{...}

public class ConcreteClass<T extends SomeBar> extends MyAbsClass<SilentUType, T>

其中SomeBar没有参数化。然后,用户可以使用T实例化。

代码语言:javascript
运行
复制
 new ConcreteClass<SomeDerivedBar>()

这在我的场景中很有效,所以我希望它能帮助到其他人。

票数 2
EN

Stack Overflow用户

发布于 2012-11-09 19:16:31

正如评论所说,这是不可能的。

我不想使用<? extends FooUType>,因为这会导致返回<U extends FooUType> U的类中的方法返回类型出现问题。

所以,这里您是说类的一些方法返回U..。但是,您不希望使用U作为类型参数。你不能两全其美。要么是这样的:

代码语言:javascript
运行
复制
public class BarType<T extends FooType<U>, U extends FooUType>{

   public U getU() { ... }
}

或者这个:

代码语言:javascript
运行
复制
public class BarType<T extends FooType<? extends FooUType>>{

   public FooUType getU() { ... }
}

如果只是您所关注的噪声实例化,您可以在适用的情况下使用new BarType<> 7。如果没有Java 7,则声明一个工厂方法,以便调用方可以使用类型推断:

代码语言:javascript
运行
复制
public static <T extends FooType<U>, U extends FooUType> BarType<T, U> make() {
    return new BarType<T, U>();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13312733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档