如何在Java中解释“public T readObjectData(… Class type)”?
我有这个Java代码。
public T readObjectData(ByteBuffer buffer, Class type) { ... T retVal = (T) summaries; return retVal;
如何解释这段代码? 为什么我们需要public T
而不是public T
?
如何将参数赋给第二个参数( Class type
)?
这声明readObjectData
方法是通用的,带有一个类型参数T
public ...
然后返回类型是T
... T readObjectData(...
如果没有初始
,这是generics类型声明,则符号T
将是未定义的。
在参数列表中, Class
是参数之一。 因为返回类型和this参数都引用T
,这可以确保如果传入Class
,它将返回一个String
。 如果传入Class
,它将返回Double
。
要传入参数,请传入任何Class
对象,例如String.class
。
部分声明了generics类型参数 T
如果你要省略这一部分,编译器可能会抱怨类型T
不存在。
在这种情况下, T
用作实际类型的占位符,只有在使用非generics类型参数实际调用方法时才会确定。
public T readObjectData(... ^ ^ | + Return type + Generic type argument
是参数类。 没有名为T
class级。 您可以将此方法用于通过名为type
第二个方法参数指定的任何类。
因为方法定义如下:
public
你可以按下面的说法调用它:
MyClass obj = o.readObjectData(buffer, MyClass.class);
请注意,您不必将readOjectData()
返回值readOjectData()
为MyClass
。 曾几何时,在java 5之前,这个方法将被定义为:
public Object readObjectData(ByteBuffer)
它的用法如下:
MyClass obj = (MyClass)o.readObjectData(buffer);
由于强制转换可能会导致ClassCastException
这是一种不好的做法。 这是发明仿制药的一个原因。
您可能会被类似且更常见的声明所困惑:
class MyClass { private T myMethod(T a){ return a; } }
在上面的例子中,私有之后不需要"
( private
)
因为它使用的T
与MyClass
类中定义的相同
更重要的是,如果你写
class MyClass { private T myMethod(T a){ return a; } }
那么意思是myMethod返回类型(可能)与MyClass类型不同。 好像你写了这个:
class MyClass { private T2 myMethod(T2 a){ return a; } }
致谢:从“Kanagavelu Sugumar”中如何使用Java中的Class