Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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中重载而不强制转换时,是否可以限制泛型类型?_Java_Generics - Fatal编程技术网

在Java中重载而不强制转换时,是否可以限制泛型类型?

在Java中重载而不强制转换时,是否可以限制泛型类型?,java,generics,Java,Generics,我有一个泛型类C,它定义了一个方法doStuff(T arg)。我想定义一个子类S,它重构对doStuff的访问,让我们举一个必须是数字的例子。我走了这么远: public class C<T> { public void doStuff(T arg) {} } public class S<T extends Number> extends C<T> { public void doStuff(T arg) { Num

我有一个泛型类
C
,它定义了一个方法
doStuff(T arg)
。我想定义一个子类S,它重构对
doStuff
的访问,让我们举一个必须是
数字的例子。我走了这么远:

public class C<T> {

    public void doStuff(T arg) {}

}

public class S<T extends Number> extends C<T> {

    public void doStuff(T arg) {
        Number n = (Number) arg;
    }

}
公共C类{
公共无效doStuff(T arg){}
}
公共类S扩展了C{
公共真空度(T参数){
数字n=(数字)arg;
}
}
然而,这意味着我必须在
S
方法中将
T
转换为
Number
。有没有一种优雅的方法可以避免这种情况


谢谢

您可以完全移除铸件。


如果它不起作用,泛型将是非常弱的特性。

因此,有几件事:

  • C
    未绑定
  • S
    绑定到
    Number
    及其子类
所以,实际上,你已经完成了你想做的事情。由于
S
中的
T
已绑定到
Number
,因此不需要强制转换

为了进一步推断,如果您创建了
C
的其他子类,在其中定义了
T
的边界

公共类Q扩展C

公共类R扩展了C


…所有这些类的
T
都将被
extends
子句右侧的任何内容绑定。

因为
T
Number
的子类,所以您根本不必强制转换。例如:

public class C<T> {

public void doStuff(T arg) {}

}

public class S<T extends Number> extends C<T> {

    public void doStuff(T arg) {
        System.out.println(arg instanceof Number);
    }

}
公共C类{
公共无效doStuff(T arg){}
}
公共类S扩展了C{
公共真空度(T参数){
System.out.println(参数instanceof Number);
}
}

doStuff()
将始终返回true(除了
arg
等于
null
)。

无需强制转换:。我已将此问题回滚。虽然我能理解你可能认为你之前的问题是一个后续问题,但事实并非如此;这是一个概念上不同的问题。我强烈建议你围绕这个问题提出一个新问题,因为在这里添加这个问题可能会使你以前问题的现有答案无效。可以理解,提出了新问题。谢谢!在这种情况下,如何返回数字?我已经编辑了我的问题,包括这个。我觉得你应该问一个新问题。你以前问过的和现在问的在概念上是不同的。