Реализация управляемого интерфейса - PullRequest
1 голос
/ 28 июня 2011

В сериализации класс, который мы хотим сериализовать, должен реализовывать интерфейс Serializable, в противном случае генерируется исключение NotSerializableException.Есть много других подобных примеров в различных функциях Java.Теперь я просто хочу знать, как ввести такой контроль в пользовательских классах и интерфейсах.У меня есть интерфейс под названием Агент.Агентов может быть много разных типов, все они должны реализовывать интерфейс Агента.У меня также есть класс под названием Node.Узлы создают Агенты.Теперь, как установить контроль в такой ситуации, чтобы агент всегда много реализовывал интерфейс агента, иначе возникнет исключение.Возможно, я звучу немного расплывчато, но если кто-то может дать мне общую идею, тогда я могу предоставить более подробную информацию, если это необходимо.

Ответы [ 2 ]

3 голосов
/ 28 июня 2011

Если у вас есть метод Node, который должен принимать агента, вы указываете, что аргумент должен быть агентом.

interface Node {
    void method(Agent agent); // must be an Agent.
    Agent returnAgent(); // must return an Agent.
}

Сериализация - это особый случай. Это связано с тем, что не все типы, которые являются сериализуемыми, являются сериализуемыми. Встроенные типы, такие как int [], сериализуемы, но не реализуют Serializable. Этот тип проверки не может быть выполнен компилятором и может быть выполнен только во время выполнения.

0 голосов
/ 28 июня 2011

Вы можете проверить, реализует ли Агент интерфейс, прежде чем ваш Узел создаст Агента.

public class CheckForInterface
{
    public static void main(String[] args) throws ClassNotFoundException
    {
        Class cl = (Class)Class.forName("TestImpl");
        Class[] itfs = cl.getInterfaces();

        for(Class c : itfs)
        {
            System.out.println(c);
        }
    }
}

import java.io.Serializable;

public class TestImpl implements Serializable
{
    public TestImpl()
    {

    }
}

Это выводит: интерфейс java.io.Serializable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...