获取接口名称“FloatingPoint”而不是扩展名为“DataTypeA”的类名

时间:2018-05-15 06:51:05

标签: java oop interface

我是java新手,我在这里遇到一个小问题,下面的类定义如下:

public interface FloatingPoint extends DataTypeA {

public interface DataTypeA extends _ElementA {

public interface _ElementA extends EObject {

当我使用以下行时:

for (int i = 0, size = MetaObject.getEAllReferences().size(); i < size; ++i) 
{
    EReference Reference = MetaObject.getEAllReferences().get(i);

    if (Reference.isContainment()){

        if (Reference.getEType() instanceof EClass) {

             EClass ContainedClass = (EClass) Reference.getEType();
             String ClassName = ContainedClass.getName();
             System.out.println(ClassName);

我得到“DataTypeA”,但我希望接口名称为“FloatingPoint”。

有没有人知道如何解决这个问题!!

2 个答案:

答案 0 :(得分:3)

您可以使用java.lang.Class#getInterfaces。根据java docs

  

它确定类或接口实现的接口   由此对象表示。如果这个对象代表一个类,那么   返回值是一个包含表示所有对象的数组   该类实现的接口。接口的顺序   数组中的对象对应于接口名称的顺序   在所表示的类的声明的implements子句中   通过这个对象。

例如:

ArrayList<String> s = new ArrayList<>();
Class<?>[] interfaces = s.getClass().getInterfaces();
Arrays.stream(interfaces).map(e -> e.getName()).forEach(System.out::println);

输出:

java.util.List
java.util.RandomAccess
java.lang.Cloneable
java.io.Serializable

在哪个类或接口ArrayList扩展/实现。

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

答案 1 :(得分:-3)

继承的类在Java中称为“super”。

myClass.super会得到你扩展的类,所以我相信你可以去找ContainedClass.super.getName(); - 但我需要很少的代码才能确定;)