题解 | #类型判断#

类型判断

http://www.nowcoder.com/practice/97223208ca954e67832da716b46e5d72

通过instanceof运算符判断obj是否属于右边类所创建对象,instanceof是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回值为boolean类型。若返回结果为true,若是则调用调用Object的getClass()方法获得Class对象,之后用getSimpleName()方法来获取这个类的名称(此环境下使用getName()方法也可以获得正确结果,但在常规情况下,使用getName()会返回包括包名在内的实体名称,这里需要注意),本题的代码参考写法如下:

if (obj instanceof Sub1) {
    Sub1 sub1 = (Sub1) obj;
    return sub1.getClass().getSimpleName();
} else if (obj instanceof Sub2) {
    Sub2 sub2 = (Sub2) obj;
    return sub2.getClass().getSimpleName();
} else {
    return obj.getClass().getSimpleName();
}

附上完整代码:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String className = scanner.next();
            Base obj = (Base) Class.forName(className).newInstance();
            System.out.println(getClassName(obj));
        }
    }

    public static String getClassName(Base obj) {

        //write your code here......
if (obj instanceof Sub1) {
    Sub1 sub1 = (Sub1) obj;
    return sub1.getClass().getSimpleName();
} else if (obj instanceof Sub2) {
    Sub2 sub2 = (Sub2) obj;
    return sub2.getClass().getSimpleName();
} else {
    return obj.getClass().getSimpleName();
}

    }

}

class Base {

}

class Sub1 extends Base {

}

class Sub2 extends Base {

}
全部评论
一行就完了: return obj.getClass().getSimpleName();
2 回复 分享
发布于 2023-09-24 14:31 陕西
很好奇实例化子类的目的是什么,获取编译类型?为什么不直接返回字符串呀?
点赞 回复 分享
发布于 2023-05-04 09:23 广东
很好奇实例化子类的目的是什么,获取编译类型?为什么不直接返回字符串呀?
点赞 回复 分享
发布于 2023-05-04 09:23 广东

相关推荐

05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
评论
34
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务