获取接口的名称"浮点",而不是扩展的类名"数据类型A"



我是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",但我想拥有接口本身的名称"浮点"。

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

您可以使用java.lang.Class#getInterfaces.根据 java 文档:

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

例如:

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

继承的类在Java中被称为"super"。

myClass.super将获得您扩展的类,所以我相信您可以选择ContainedClass.super.getName(); - 但我必须很少的代码才能确定;)

最新更新