接受类作为参数的方法

时间:2016-01-06 23:15:06

标签: java

我有一个类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代码时生成的类文件吗?

2 个答案:

答案 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;。一个类只能实现接口,而不是类。它只能扩展一个类正如您在后面的评论中澄清的那样,MEnumSF都是接口。)

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>)。