C#默认()的等效Java关键字/构造是什么?

时间:2011-04-25 22:03:13

标签: java

在C#中,default关键字设置类型参数的默认值。对于引用类型,这将为null,对于值类型,它将为零。

我正在寻找Java中的等效关键字或构造。我对Java中的引用与值类型非常模糊 - 它们的行为是否相同?

我有一个定义为

的函数
private T BuildEntityFromResultSet(ResultSet resultSet)
{
    // Initialize T appropriately
    T entity = <blank>; // default(T) in C#.
}

是否有正确初始化T的关键字可以填写上面的空白?是否有必要关注Java中的初始值(除了null)?

我看到了this question,但它似乎没有回答我的。

2 个答案:

答案 0 :(得分:3)

Java中不需要此功能,因为类型参数在运行时被擦除,即编译后字段entity将为Object类型。因此,您根本不能将原始类型(您称之为值类型)作为Java中的类型参数。并且所有引用类型的默认值为null

答案 1 :(得分:0)

Java中没有相应的构造。原始数字总是默认为零; boolean为false,Objects为null。但Java没有价值类型。

使用泛型,可以避免此功能。考虑:

public Holder<T> {
  private T _value;
  public reset() {
    _value = ??
  }
}

此处,我们无法使用Holder<int>,只能使用Holder<Integer>,因此_value始终可以重置为空。

但是,我找到了一个错过此功能的地方。如果您正在为Java代理编写InvocationHandler,并且该方法的返回类型是基元,则只返回null不起作用。