gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:17:25 24 4
gpt4 key购买 nike

我正在创建 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 - 匿名内部类的类名相同 - obj.getClass().getName(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51463060/

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