Способ реализации частичных классов в Java - PullRequest
28 голосов
/ 26 марта 2012

У меня есть интерфейс, который я хочу реализовать в отдельных классах после быстрого поиска в Google, У Java нет частичных классов. Есть ли способ, которым я могу сделать это, или я застрял, бросая весь мой код в один класс?

По сути, я пытаюсь написать сервис. Некоторые из сервисных методов действительно принадлежат своему классу и кажутся нелогичными в том же классе. Вот пример того, что я пытаюсь сделать.

package com.upmc.esdm.messaging.epcd.service;
import java.util.List;

import javax.ejb.Remote;

import com.upmc.esdm.messaging.epcd13jpa.entities.EmailDomainTrust;


@Remote
public interface MessagingInterfaceRemote {
public List<EmailDomainTrust> getEmailDomains();

    public int upDateQualityTable();

    public string isLogial();

    public byte[] ToWritePartialClassesInJava();
}

Обычно у меня есть частичные классы в C #, и я бы помещал подобные методы, которые возвращают похожие значения, в один частичный класс (или, возможно, классы, которые обновляют запись в одном классе). Как бы я это реализовал? Или я должен просто поместить все реализации метода в один класс?

Спасибо.

Ответы [ 5 ]

36 голосов
/ 26 марта 2012

В Java нет ничего подобного частичным классам.Вы можете достичь многих из тех же преимуществ, используя агрегацию, делегирование и абстрактные базовые классы.

(Я уступил давлению со стороны сверстников и устранил замечание «к счастью», которое вызвало так много тепла в комментарияхОчевидно, что это маленькое отклонение принесло мне четыре отрицательных голоса, несмотря на то, что я не имел отношения к ответу.)

3 голосов
/ 13 февраля 2013

Aspectj может быть ответом на C # /. Net частичную функцию класса!Spring Roo является одной из типичных сред разработки, использующих аспектj, чтобы разделить функциональные возможности класса на несколько разных файлов.

2 голосов
/ 26 марта 2012

Прежде чем идти по этому маршруту, вы можете рассмотреть шаблон проектирования Builder . Это позволяет вашему сервису объединять реализации, реализованные в отдельных классах. Нет необходимости в прекомпиляторе, и он очень чистый с точки зрения ОО.

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

Если вы действительно хотите ( не рекомендуется ), вы можете использовать препроцессор для сборки частей класса перед компиляцией.

Единственный сценарий, в котором препроцессор может иметь смысл, - это если часть вашей реализации генерируется кодом, а другие части кодируются вручную. Простым подходом может быть #include внешне определенные фрагменты класса в вашем основном файле .java и запуск препроцессора C над файлом перед компиляцией.

1 голос
/ 26 марта 2012

Вы можете объявить методы через несколько интерфейсов, а затем позволить вашим конкретным классам реализовать несколько интерфейсов.

Более того, используя java.lang.Proxy, вы можете собрать свой сервис из нескольких интерфейсов и делегировать реальные вызовы методовотдельная реализация.

0 голосов
/ 19 января 2019

Я ненавижу поднимать старую ветку, но думал, что привнесу новую перспективу в отношении данных ответов. Аспектно-ориентированное программирование может лучше достичь того, что вы пытаетесь реализовать сквозные задачи.

Вы ищете надежное ассоциативное решение, в котором вы можете проанализировать детали реализации различных методов управления.Рамка Spring очень заметна в этом пространстве и часто ассоциируется с микро-сервисами в наши дни.

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