Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用通配符限制函数只接受类及其子类 public void testFunction(T){ }_Java_Generics - Fatal编程技术网

Java 使用通配符限制函数只接受类及其子类 public void testFunction(T){ }

Java 使用通配符限制函数只接受类及其子类 public void testFunction(T){ },java,generics,Java,Generics,这与编写testFunction(异常t)相同。我在上面使用泛型只是为了说明java允许这样做 但是Java不允许使用通配符做同样的事情 public <T extends Exception> void testFunction(T t) { } public void testFunction(您不需要泛型(即使将Integer替换为非final类): 实际上,在Java中没有办法指定严格的子类型(一个排他性的上限类型)。Integer是最后一个类。您不能扩展

这与编写testFunction(异常t)相同。我在上面使用泛型只是为了说明java允许这样做

但是Java不允许使用通配符做同样的事情

       public <T extends Exception> void testFunction(T  t) {

}

public void testFunction(您不需要泛型(即使将
Integer
替换为非final类):


实际上,在Java中没有办法指定严格的子类型(一个排他性的上限类型)。

Integer
是最后一个类。您不能扩展它。如果您希望一个方法可以用Foo或Foo的任何子类作为参数调用,那么签名就是
void someMethod(Foo-Foo)
。您不需要使用泛型或通配符。您的标题似乎表明您希望将类型限制为某个对象的子类。但您给出的泛型示例实际上并不这样做(它允许类本身)。你能澄清你真正想要的是什么吗?为什么否决票?
Integer
是一个糟糕的选择,是
final
,但除此之外,这是一个好问题。我在问题中明确指出,这样做没有真正的目的。我一开始不需要使用泛型。但我很好奇是否有语法允许我这么做使用通配符执行此操作。OP标题似乎表示只允许使用给定类型的子类。@realpoint听起来OP可能需要一个interface@RealSkeptic当将泛型类型参数与“extends”类型绑定一起使用时,“extends”后面显示的类型关键字还可以替换泛型类型参数,而不仅仅是该类型的子类。我很清楚这一点。但是OP可能不是。
        public void testFunction(<? Extends Exception> t) {

}
public void testFunction(Integer t) {
public <T extends Integer> void testFunction(T  t) { ... }
public void testFunction(Integer i) { ... }