【问题标题】:Determine Original Object Type after Casting to Interface Type转换为接口类型后确定原始对象类型
【发布时间】:2014-02-27 19:02:31
【问题描述】:

我有一个实现接口的对象。对象被创建,但是被分配了接口的数据类型,类似于:

List<String> someList = new ArrayList<String>();

在此示例中,ArrayList 被隐式转换为 List 类型。我以后如何以编程方式确定List someList 实际上是伪装的ArrayList

我必须使用instanceof 和一堆选择语句来确定真正的类型吗?或者有没有办法获取原始类型的类名?

希望这是一个很好的例子,实际代码更复杂,并且处理自定义数据类型。

【问题讨论】:

    标签: java interface casting


    【解决方案1】:

    是的,您可以使用Object#getClass() 方法获取实际对象的Class 类型。

    class Parent { }
    class Child extends Parent { }
    
    class Main {
        public static void main(String... args) {
            Parent parent = new Child();
            System.out.println(parent.getClass());  // Child.class
        }
    }
    

    【讨论】:

    • 即使它已被转换为另一种类型?
    • @SnakeDoc 转换为另一种类型是什么意思?您在问题中完成的作业没有任何演员表。它只是扩大了转化率。
    • @SnakeDoc 严格来说,它还没有被转换为另一种类型。对象引用刚刚更改,并允许您访问原始对象中的某些方法。对象本身在很大程度上仍然是一个Child 对象。
    • 很好的例子。很惊讶这是多么简单……我想太多了。我会在计时器用完时接受。
    • @SnakeDoc 我认为更多的问题是由过度思考引起的。
    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多