可能重复: Is it possible to reference a nested generic parameter in java?
一个关于Java泛型的快速问题(如果可以的话)。是否有用于声明不用作实例化的泛型参数的泛型类范围类型的语法。例如:
public class <U extends FooUType> BarType<T extends FooType<U>>{
public U getU(){return U;}
}
要创建一个BarType,我想编写以下内容,它本身包含U,但我不想单独指定U。所以:
BarType<SomeT<FooUType>> instance
我们从参数化的SomeT中隐式地得到U的类型,而不必分别指定U。相对于:
public class BarType<U extends FooUType, T extends FooType<U>>
这将需要:
BarType<FooUType,SomeT<FooUType>>
我想我是在寻找方法上类似于相同想法的东西:
public <U> boolean StupidMethod(String s){
...
}
我不想使用<? extends FooUType>
,因为这会导致返回<U extends FooUType> U
的类中的方法返回类型出现问题。
非常感谢您的澄清!
发布于 2012-11-12 02:17:23
谢谢大家,
最后我想找一个不同的解决方案。基本上,我试图隐藏U
的类是抽象的,因此我添加了U
作为泛型参数,因为这是无法避免的。然后我创建了具体的类来扩展它,并让它们静默地填写U
类型,这样调用者就不需要膨胀它们的代码了。
就像这样:
public abstract class MyAbsClass<U extends Foo, T extends Bar<U>>{...}
public class ConcreteClass<T extends SomeBar> extends MyAbsClass<SilentUType, T>
其中SomeBar
没有参数化。然后,用户可以使用T
实例化。
new ConcreteClass<SomeDerivedBar>()
这在我的场景中很有效,所以我希望它能帮助到其他人。
发布于 2012-11-09 11:16:31
正如评论所说,这是不可能的。
我不想使用
<? extends FooUType>
,因为这会导致返回<U extends FooUType> U
的类中的方法返回类型出现问题。
所以,这里您是说类的一些方法返回U
..。但是,您不希望使用U
作为类型参数。你不能两全其美。要么是这样的:
public class BarType<T extends FooType<U>, U extends FooUType>{
public U getU() { ... }
}
或者这个:
public class BarType<T extends FooType<? extends FooUType>>{
public FooUType getU() { ... }
}
如果只是您所关注的噪声实例化,您可以在适用的情况下使用new BarType<>
7。如果没有Java 7,则声明一个工厂方法,以便调用方可以使用类型推断:
public static <T extends FooType<U>, U extends FooUType> BarType<T, U> make() {
return new BarType<T, U>();
}
https://stackoverflow.com/questions/13312733
复制相似问题