以下C#代码的Java等价物是什么?

以下C#代码的Java等价物是什么?,c#,java,C#,Java,我有一个有趣的问题。我了解以下C#代码允许用户在参数中输入空值: public DateTime? date (DateTime dt) {} 用Java编码时,等价物是什么?说“Java没有C#所具有的可空特性”。这是答案吗?Java不支持用户定义的值类型(例如,不能为空的类型)。在这方面,Java DateTime对象已经支持nullable,因为它允许分配null 对于其他类型,例如int和double,您可以通过使用允许赋值为null的盒装版本Integer和double来实现相同的效

我有一个有趣的问题。我了解以下C#代码允许用户在参数中输入空值:

public DateTime? date (DateTime dt) {}

用Java编码时,等价物是什么?

说“Java没有C#所具有的可空特性”。这是答案吗?

Java不支持用户定义的值类型(例如,不能为空的类型)。在这方面,Java DateTime对象已经支持nullable,因为它允许分配null


对于其他类型,例如
int
double
,您可以通过使用允许赋值为null的盒装版本
Integer
double
来实现相同的效果。

由于Java中的日期是一个类,因此对它的引用可能已经为null。换言之

public Date date(Date dt) { }
…是Java的同一版本


请注意,该参数在Java中也可以为null,而在C版本中则不能为null。

如果我回忆正确,Java中的每个对象都可以为null。 基本类型(
int、double、float、char等)不能为null。要对它们使用null,必须使用它们的对象对应项(
整数、双精度、浮点…

关于日期,java.util.Date是一个对象,因此可以为null。日历和公历也是如此

等效代码如下所示:

public Date date(Date dt) throws NullPointerException { 
  if (dt == null) throw new NullPointerException();
  ...
}

在C#中,您可以使用?允许在基元类型中使用null val(例如,强制执行对象null引用错误)。我不明白这件事为什么困扰你。例如,如果您在java中需要一个可为null的整数参数,您只需使用
java.lang.integer
而不是primitive
int
类型。

此方法返回一个可为null的日期时间,但其参数不可为null。
c
示例允许返回一个可为null的日期时间。作为参数传递的DateTime不能为null。可能与的重复,因此请详细说明为什么我们会在代码中使用“?”?我知道如果没有它,如果我设置dt=null,就会出现一个错误。nope可能是重复的,为了相等,你必须检查dt参数,如果给定的值为null,则抛出一个NullPointerException(当然我是在开玩笑:P)这个问题实际上是关于用C#和Java语法更新我的知识,并简单地理解设置可空参数的最佳实践。非常感谢您的回答。C#和java有些相似,但它们仍然是两种不同的语言。在Java中,有些东西在C#和viceversa中是没有对应的。我的建议不是比较特定于语法的问题,而是比较它们的功能。祝您愉快。实际上抛出NullPointerException是一个运行时错误,而如果您试图传递null,C#语法会导致编译错误。当然,老实说,我更喜欢C#的编译时检查,而不是Java的运行时检查。但是,如果您“忘记”try/catch,那么使用throw子句将使编译器发出错误(在我看来,这比什么都不做要好)。在这方面,我更喜欢用java方式在代码中的某个地方强制执行catch块。在C#中,你不会被迫接球(或者我回忆错了吗?)