22

正如我们所知,C# 提供了一个 AS 关键字,该关键字自动执行检查 Object 是否属于某个类型,如果是,则将其强制转换为所需的类型,否则返回 null。

public class User { }
Object obj = someObj;
User user = obj As User;

在上面的示例中,对象 obj 可以是用户类型或其他类型。用户将获得 User 类型的对象或 null。这是因为 C# 的 As 关键字首先执行检查,如果可能,然后将对象强制转换为结果类型。

那么Java中是否有任何关键字相当于C#的AS关键字?

4

3 回答 3

26

您可以创建一个辅助方法

public static T as(Object o, Class<T> tClass) {
     return tClass.isInstance(o) ? (T) o : null;
}

User user = as(obj, User.class);
于 2011-06-02T20:11:51.307 回答
21

不,您可以检查,instanceof然后投射是否匹配

User user = null;
if(obj instanceof User) {
  user = (User) obj;
}
于 2011-06-02T20:07:51.990 回答
12

没有关键字,但为了完整起见,我会给你 1-liner 等效项:

User user = obj instanceof User ? (User) obj : null;

(你可能不必有明确的演员表,我不确定。)

于 2011-06-02T21:11:35.450 回答