gpt4 book ai didi

java - 使用匿名接口(interface)的任意定义方法

转载 作者:IT老高 更新时间:2023-10-28 20:47:01 24 4
gpt4 key购买 nike

考虑以下代码:

public static void main(String[] args) {
File file = new File("C:\\someFile.txt") {
public void doStuff() {
// Do some stuff
}
};

file.doStuff(); // "Cannot resolve method"
}

当我们尝试调用我们新定义的方法 doStuff() 时,这是不可能的。原因是 file 被声明为 File 类型的对象,而不是我们新的匿名子类的实例。

所以,我的问题是,是否有任何“好”的方法来实现这种行为?除了显而易见的(就是正确地声明类)。

最佳答案

这是不可能的,因为您试图在父类(super class)引用上调用方法子类。并且该方法未在父类(super class)本身中定义。匿名类只是 File 的子类。

但是,一种解决方法是通过反射:

file.getClass().getMethod("doStuff").invoke(file);

getClass()方法将返回 file 的运行时类型,然后您可以使用 Class#getMethod() 获取该类的方法方法。

嗯,我自己不是反射(reflection)的忠实粉丝。如果你要做这些事情,更好的方法当然是通过扩展父类(super class)来创建一个类。使用反射来解决问题真的很头疼,因为使用简单的修改就可以轻松完成。

关于java - 使用匿名接口(interface)的任意定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18656107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com