web-dev-qa-db-fra.com

Un moyen d'implémenter des classes partielles en java

J'ai une interface que je veux implémenter dans des classes séparées après avoir apparemment effectué une recherche rapide dans Google. Java n'a pas de classes partielles. Y a-t-il un moyen de faire cela ou suis-je coincé en lançant tout mon code dans une classe?

En gros, j'essaie d'écrire un service… .. Certaines des méthodes de service appartiennent vraiment à leur propre classe et semblent un peu illogiques dans la même classe. Voici un exemple de ce que j'essaie de faire.

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();
}

J'aurais normalement des classes partielles en C # et je mettrais des méthodes similaires qui renvoient des valeurs similaires dans une classe partielle (ou peut-être des classes mettant à jour un enregistrement dans une classe). Comment pourrais-je implémenter ceci? Ou devrais-je simplement mettre toutes les implémentations de méthodes dans une classe?

Merci.

28
SoftwareSavant

Il n'y a rien de tel que des classes partielles en Java. Vous pouvez obtenir beaucoup des mêmes avantages en utilisant les classes d'agrégation, de délégation et de base abstraite.

(J'ai cédé à la pression des pairs et éliminé la remarque «heureusement» qui a généré tant de chaleur dans les commentaires. Évidemment, ce petit écart semble m'avoir valu quatre votes défavorables, bien que mes réponses ne soient pas pertinentes.)

35
Ted Hopp

Aspectj peut être la réponse à la fonctionnalité de classe partielle C #/.net! Spring Roo est l’un des frameworks de développement classiques utilisant aspectj pour diviser les fonctionnalités d’une classe en plusieurs fichiers différents.

3
abgalphabet

Avant de suivre cette voie, vous pouvez envisager le modèle de conception du générateur . Cela permet à votre service d'agréger les implémentations implémentées dans des classes séparées. Pas besoin de pré-compilateur, et très propre d'un point de vue OO.

Chaque classe de composant a une responsabilité spécifique et étroite, la classe de service recensant les services de ses classes de composant pour mettre en œuvre uniquement la responsabilité du service.

Si vous voulez vraiment (non recommandé), vous pouvez utiliser un pré-processeur pour assembler des parties d'une classe avant la compilation.

Le seul scénario dans lequel un préprocesseur peut avoir un sens est si une partie de votre implémentation est générée par un code et que d'autres sont codées à la main. Une approche simple pourrait consister à #include les fragments de classe définis en externe dans votre fichier .Java principal et à exécuter un pré-processeur C sur le fichier avant la compilation.

2
Eric J.

Vous pouvez déclarer des méthodes via plusieurs interfaces, puis laisser vos classes concrètes implémenter plusieurs interfaces.

De plus, en utilisant Java.lang.Proxy, vous pouvez assembler votre service à partir de plusieurs interfaces et déléguer les appels de méthodes réels à une implémentation distincte.

1
Eugene Kuleshov

Je déteste faire remonter un vieux fil, mais je pensais apporter une nouvelle perspective en ce qui concerne les réponses données. La programmation Aspect Oriented permet de mieux réaliser ce que vous essayez de mettre en œuvre pour des problèmes transversaux. 

Vous recherchez une solution associative robuste permettant d'analyser les détails d'implémentation selon différentes méthodes de contrôle. Le cadre Spring est très important dans cet espace et est souvent associé aux micro-services de nos jours.

0
Chad Harrison