java - 匿名内部类的 ClassName 相同 - obj.getClass().getName()

标签 java lambda foreach java-8 inner-classes

我正在创建 20 个新的内部类并重写一个方法来打印类名。但每次我得到这 20 个实例时,类名都是相同的。我的要求是为每个人获取不同的类名称。我怎样才能实现这个目标?非常感谢您的指点 - 谢谢。

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class TestClassName {
    public static void main(String[] args) {


    List<? super Check>  list=   IntStream.rangeClosed(1, 20).mapToObj(e -> new Check() {

        @Override
        public void execute() {
            System.out.println(this.getClass().getName());

        }
    }).collect(Collectors.toList());

list.forEach(i -> ((Check)i).execute());
}
}

interface Check {
public abstract void execute();
}

输出

TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
TestClassName$2
    TestClassName$2

最佳答案

简单:您正在重复实例化相同内部类。

您的代码仅包含一个内部类!

当您执行 new Integer() 20 次时,您会认为每次都会创建一个新的 Integer 类吗?当然不是。类保持不变,您只是获得同一类的不同对象。

为了创建多个匿名内部类,您实际上必须在源代码中重复添加定义!

为了解决您的问题,您需要一个使用对象“身份”而不是其类的注册表!

关于java - 匿名内部类的 ClassName 相同 - obj.getClass().getName(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51463060/

相关文章:

java - 如何计算 2 的幂 N 其中 N 是一个非常大的数

c# - 传递 bool 表达式作为方法参数

javascript - 从 jQuery 检测 PHP foreach 内部的输入值变化

java - 合并两个数组列表的最快方法

java - 如何找到通用类型

haskell - 在 Haskell 中简单输入 lambda 演算失败

php - PHP中foreach的计数部分是如何实现的?

Java foreach递归返回(树中的 child 数)

java - Android 中使用计时器重复运行请求

java - 消除接受不同功能接口(interface)的重载方法的歧义