以下C#代码的Java等价物是什么?
我有一个有趣的问题。我了解以下C#代码允许用户在参数中输入空值:以下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来实现相同的效
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
而不是primitiveint
类型。此方法返回一个可为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#中,你不会被迫接球(或者我回忆错了吗?)