java - 从匿名类调用新定义的方法

标签 java anonymous-class anonymous-methods

我实例化了一个匿名类的对象,并向其中添加了一个新方法。

Date date = new Date() {
    public void someMethod() {}
}

我想知道是否可以从外部调用此方法,类似于:

date.someMethod();

最佳答案

好问题。答案是否定的。您不能直接调用 date.someMethod();
我们先来了解一下这是什么。

Date date = new Date()  { ... }; 

上面是匿名(没有名字)子类,它扩展了 Date 类。

当您看到如下代码时,

    Runnable r = new Runnable() {

        public void run() {

        }

    };

这意味着您已经定义了匿名(没有名称)类,该类正在实现(而不是扩展)Runnable 接口(interface)。

所以当你调用date.someMethod()时它无法调用,因为 someMethod superclass. 中定义在上面的例子中,父类(super class)是 Date类(class)。它遵循简单的覆盖规则。

但是如果你想打电话 someMethod然后是以下步骤。

第一种方式>
使用引用变量 ' date '
date.getClass().getMethod("someMethod").invoke(date);

第二种方式>
使用新创建的 Date 类对象的匿名子类。

new Date() 
{
    public void someMethod() {
          System.out.println("Hello");
    }
}.someMethod();   //this should be without reference 'date'

关于java - 从匿名类调用新定义的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60351461/

相关文章:

Java认证安全

java - 这个实现会被称为匿名类吗?

java - 匿名内部类——获取 "this"

Delphi:强制捕获匿名方法的 "unused"变量

c# - 循环中匿名方法的不同 "execution context"的问题

java - 在 Java 8 中将属性过滤/排序到 map 中

java - 区分 .csv 和假 .csv

java - 从内部匿名类访问外部匿名类

c# - 匿名方法/函数 : a fundamental feature or a violation of OO principles?

java - JPA:@PrimaryKeyJoinColumn(...) 与@JoinColumn(..., insertable = ?, updatable = ?) 一样吗?