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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取接口名称“FloatingPoint”而不是扩展名为“DataTypeA”的类名相关的知识,希望对你有一定的参考价值。

我是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”。

有谁有想法如何解决这样的问题!

答案

你可以使用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
另一答案

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

myClass.super将获得你扩展的类,所以我相信你可以去ContainedClass.super.getName(); - 但我必须要小代码才能确定;)

以上是关于获取接口名称“FloatingPoint”而不是扩展名为“DataTypeA”的类名的主要内容,如果未能解决你的问题,请参考以下文章

检查浮点变量是不是为整数的最可靠方法是啥?

从接口名称而不是相机编号创建 openCV VideoCapture

获取名称而不是 ID [关闭]

获取属性的名称而不是值

Django 'resolve':获取 url 名称而不是 view_function

在android中从名称而不是id获取资源