是否可以将接口类型转换为值?

时间:2016-03-18 22:12:04

标签: java interface casting anonymous-types

我有一个界面:

In [2]: c
Out[2]: array([ 13.,  21.,  16.])

具有参数属于接口类型的方法的类:

public interface TestFace {
    public String outThis();
}

如果我像这样调用对象的方法:

class MyClass {
    public void outMeth(TestFace inMeth){
        System.out.print(inMeth); //the method attempts to print the interface type
   }
}

打印值是对实例的引用。有人可以解释为什么会发生这种情况/怎么做到这一点?

2 个答案:

答案 0 :(得分:3)

System.out.println上执行Object的结果将始终是调用对象的toString()方法的结果。如果从Object继承(通过不编写显式toString()),则会获得默认的Object实现,该实现已指定:

  

类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@'”以及哈希代码的无符号十六进制表示形式组成。宾语。换句话说,此方法返回一个等于值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())

"名称"一个匿名类通常反映了定义匿名类的类,通常添加了$1或类似的类。

如果你想要一个更有用的toString(),请覆盖它并自己写一个:

    new TestFace() {
        public String outie() {
            String val = "something";
            return val;
        }
        public String toString() {
            return outie();
        }
    }

答案 1 :(得分:1)

如果您想打印val,只需覆盖toString()方法。

MyClass a = new MyClass();
a.outMeth(new TestFace() {
    public int outie() {
        int val = "something";
        return val;
    }

    @Override
    public String toString() {
        return outie();
    }
});