我有一个类FTSF
或者我应该说java enum实现MEnum
接口和SF
接口,如下所示:
public enum FTSF implements MEnum<FTSF>, SF {
private static final Map<String, FTSF> cmap = MEnum.bCMap(FTSF.class);
.........
so on and so forth
问题:
1)由于FTSF
是一个Java枚举,这就是为什么它可以实现它想要的多少个类?我有点困惑,因为当类实现接口时通常使用implement
关键字。
2)我知道可以将一个类作为一个参数传递给一个方法参数,所以上面,当FTSF
方法中传递bCMap
类时,我试图找出得到的内容在bCMap
方法中作为参数传递。是编译Java代码时生成的类文件吗?
答案 0 :(得分:1)
1)Java类只能extend
一个类,但它们可以implement
尽可能多。它与FTSF作为枚举无关。
2)表示FTFS的是Class对象。只要你不在子类中,你也可以通过调用getClass()
来获取它。它对于像反射这样的东西很有用。它的文档在https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
答案 1 :(得分:1)
1)枚举,就像任何其他类一样,可以实现任意数量的接口。 (当你问及&#34;为什么它可以实现它想要的那么多类时,我有点困惑&#34;。一个类只能实现接口,而不是类。它只能扩展一个类正如您在后面的评论中澄清的那样,MEnum
和SF
都是接口。)
2)当您编译名为T
的Java类时,Java编译器会创建一个对象,该对象是泛型类Class<T>
的实例。这是一个特殊的类,它包含有关您刚刚编写的类的信息 - 例如它的名称,以及它包含的字段和方法集。它是一个名为Reflection的功能的一部分。在你的问题的陈述中:
private static final Map<String, FTSF> cmap = MEnum.bCMap(FTSF.class);
表达式FTSF.class
是对此类Class<FTSF>
的单个实例的引用。所以方法bCMap()正在传递对该对象的引用;但是,给定上下文,将此参数传递给方法的最可能原因不是因为该方法想要了解该类,而是因为该类对象被用作伪参数来告诉编译器通用方法{ {1}}返回bcMap
(而不是Map<String, FTSF>
)。