Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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,我创建了一个没有参数的通用方法,比如: private <T> TableCell<T> createTableCell(){ return new TableCell<T>(); } private TableCell createTableCell(){ 返回新的TableCell(); } 因此,在我的程序中,如何为具体类型调用此方法?您将以调用其内部构造函数的相同方式调用此方法:createTableCell()因为无法从上下文推断类型(当您调用该

我创建了一个没有参数的通用方法,比如:

private <T> TableCell<T> createTableCell(){
return new TableCell<T>();
}
private TableCell createTableCell(){
返回新的TableCell();
}

因此,在我的程序中,如何为具体类型调用此方法?

您将以调用其内部构造函数的相同方式调用此方法:
createTableCell()
因为无法从上下文推断类型(当您调用该方法时),因此在以下方式调用时必须指定它:

obj.<MyType>createTableCell()
obj.createTableCell()

其中,
obj
是包含该方法的类/类型的对象

通常,类型是推断的,但您可以使用以下语法指定类型:

注意:方法的定义中有一个错误-它没有返回类型:

private <T> TableCell<T> createTableCell(){
    return new TableCell<T>();
}


另一方面,当你使用这种语法时,许多人会惊叹你的“卓越”——这是一种不常见的语法。

一旦你调用这个方法,它将返回类型为T的TableCell,即T持有类的类型。你是说“return”而不是“return”?一般来说,当我调用这个方法时,它将返回TableCell,但我想把它转换成一种具体的类型,称为a类和B类。那么如何实现这一点呢?可能重复:@Kafray:你说得对,我的打字错误。我更新了它。实际上语法是
obj.createTableCell()
@missingfaktor是。谢谢实际上我正在尝试,因为在这种情况下我总是忘记语法。。。那时你跑得更快me@Thinhbk不要急于接受答案,可能有人稍后会提供更准确、更深入的解释。是的,你说得对。这是我的错误。总之,泛型方法在非泛型类中,我希望这个类的其他方法调用这个泛型类,而不是其他类的方法。是的。我也先发布了正确的答案。(另一个答案是在我的答案发布后编辑的——我想他抄袭了我的答案)。感谢您的解释,这有助于我更清楚地理解,因为定义泛型类和泛型方法时的语法让我感到困惑。您能解释更多关于“类型是推断的”,为什么调用createTableCell()不起作用,而这个.createTableCell()不起作用吗是吗?@Thinhbk原因是技术性的:java编译器不接受以特殊字符开头的语句(在这种情况下,
Hmm,在这种情况下,您必须扩展方法签名以包含类型提示。如果您没有任何相关信息要传递到方法中,通常的方法是使用一个
Class
参数,该参数仅用于指定类型。然后,您可以将该方法称为
createTableCell(TypeName.class)
TableCell<SomeType> tableCell = myObject.<SomeType>createTableCell();
TableCell<SomeType> tableCell = MyClass.<SomeType>createTableCell();