如何在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 type是参数之一。 因为返回类型和this参数都引用T ,这可以确保如果传入Class ,它将返回一个String 。 如果传入Class ,它将返回Double

要传入参数,请传入任何Class对象,例如String.class

部分声明了generics类型参数 T 如果你要省略这一部分,编译器可能会抱怨类型T不存在。

在这种情况下, T用作实际类型的占位符,只有在使用非generics类型参数实际调用方法时才会确定。

 public  T readObjectData(... ^ ^ | + Return type + Generic type argument 

是参数类。 没有名为Tclass级。 您可以将此方法用于通过名为type第二个方法参数指定的任何类。

因为方法定义如下:

public T readObjectData(ByteBuffer buffer, Class type)

你可以按下面的说法调用它:

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 myMethod(T a)

因为它使用的TMyClass类中定义的相同

更重要的是,如果你写

 class MyClass { private  T myMethod(T a){ return a; } } 

那么意思是myMethod返回类型(可能)与MyClass类型不同。 好像你写了这个:

 class MyClass { private  T2 myMethod(T2 a){ return a; } } 

致谢:从“Kanagavelu Sugumar”中如何使用Java中的Class 获得更长的答案?