Как определить класс и интерфейс в коде Java? - PullRequest
6 голосов
/ 18 февраля 2010

Допустим, у меня есть следующий код Java.

    public class Example {
        public static void main(String[] args){
            Person person = new Employee();
        }
    }

Как узнать, является ли Person классом или интерфейсом?

Поскольку класс Employee может расширять его, если это класс, или реализовывать его, если это интерфейс.

И в обоих случаях Лицо person = new Employee (); действительно.

Ответы [ 4 ]

9 голосов
/ 18 февраля 2010

Если вы еще не знаете, является ли Person интерфейсом или классом по природе документации для самого класса / интерфейса (вы используете его, возможно, у вас есть какие-то документы или что-то еще?), Вы можете скажите с кодом:

if (Person.class.isInterface()) {
   // It's an interface
}

Подробности здесь .

Редактировать : Исходя из вашего комментария, вы можете использовать неординарную утилиту:

public class CheckThingy
{
    public static final void main(String[] params)
    {
        String name;
        Class  c;

        if (params.length < 1)
        {
            System.out.println("Please give a class/interface name");
            System.exit(1);
        }
        name = params[0];
        try
        {
            c = Class.forName(name);
            System.out.println(name + " is " + (c.isInterface() ? "an interface." : "a class."));
        }
        catch (ClassNotFoundException e)
        {
            System.out.println(name + " not found in the classpath.");
        }
        System.exit(0);
    }
}

Использование:

java CheckThingy Person
5 голосов
/ 18 февраля 2010

Я думаю, что в этом случае вы не знаете, потому что вы не должны знать. Если вы пишете что-то, что расширяет или реализует (класс Employee), то вам остается взглянуть на документы или исходный код.

Если, как в вашем примере, вы просто используете некоторые классы / интерфейсы, вам не нужно знать или заботиться о том, является ли класс Person конкретным или абстрактным, или интерфейсом, если он имеет четко определенный API .

2 голосов
/ 18 февраля 2010

Просто сделайте Ctrl + щелкните левой кнопкой мыши на Person в вашей IDE и / или прочитайте его источник и / или Javadoc.

Если вы еще не используете IDE, я могу порекомендовать Eclipse или IntelliJ IDEA . Если вы работаете с Java EE (JSP / Servlet и тому подобное), либо воспользуйтесь Eclipse для Java EE , либо заплатите за IDEA Ultimate edition .

2 голосов
/ 18 февраля 2010

Для этого можно использовать метод isInterface() класса Class. Какова ваша причина для этого, хотя? У вас есть плохо документированная библиотека, где вы должны это выяснить? Возможно, если бы мы знали, что вы пытаетесь сделать, можно было бы предложить более элегантное решение.

if(Class.forName("Person").isInterface())
    //do interface stuff
else
    //do class stuff

или

if(Person.class.isInterface())
    ...

РЕДАКТИРОВАТЬ: При чтении вашего комментария к T.J. Краудер ответ. Вот что я бы сделал:

if(Person.class.isInterface())
    System.out.println("Person is an Interface");
else
    System.out.println("Person is a class");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...