我正在创建 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/