web-dev-qa-db-ja.com

javaで部分クラスを実装する方法

Javaには部分的なクラスがありません。これを実行できる方法はありますか?すべてのコードを1つのクラスにスローしますか?

基本的に、サービスを作成しようとしています。一部のサービスメソッドは実際には独自のクラスに属し、同じクラスでは一種の非論理的なように見えます。これが私がやろうとしていることの例です。

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#には部分クラスがあり、同様の値を返す同様のメソッドを1つの部分クラス(または1つのクラスのレコードを更新するクラス)に入れます。これをどのように実装しますか?または、すべてのメソッド実装を1つのクラスに入れる必要がありますか?

ありがとう。

28
SoftwareSavant

Javaには部分クラスのようなものはありません。集約、委任、および抽象基本クラスを使用して、同じ利点の多くを実現できます。

(私は仲間の圧力に屈し、コメントでこれほど多くの熱を発生させた「ありがたい」発言を排除しました。明らかに、その少しの余地は答えに無関係であるにもかかわらず、私に4つの下票を獲得したようです)

36
Ted Hopp

Aspectjは、C#/。netの部分クラス機能の答えになります。 Spring Rooは、アスペクト機能を使用してクラス機能をいくつかの異なるファイルに分割する典型的な開発フレームワークの1つです。

3
abgalphabet

そのルートに進む前に、 Builderデザインパターン を検討することをお勧めします。これにより、サービスは別個のクラスに実装されている実装を集約できます。プリコンパイラは不要で、OOの観点からは非常にきれいです。

各コンポーネントクラスには特定の狭い責任があり、サービスクラスはそのコンポーネントクラスのサービスを登録して、サービスの責任のみを実装します。

非推奨)に本当にしたい場合は、プリプロセッサを使用して、コンパイルの前にクラスの一部を組み立てることができます。

プリプロセッサが意味を持つ唯一のシナリオは、実装の一部がコード生成され、他の部分が手作業でコーディングされている場合です。簡単なアプローチは#includeメインの.Javaファイルで外部的に定義されたクラスフラグメント。コンパイルの前にファイルに対してCプリプロセッサを実行します。

2
Eric J.

複数のインターフェースを介してメソッドを宣言し、具象クラスに複数のインターフェースを実装させることができます。

さらに、Java.lang.Proxyを使用すると、複数のインターフェースからサービスを組み立てて、実際のメソッド呼び出しを別の実装に委任できます。

1
Eugene Kuleshov

私は古いスレッドを持ち出すことを嫌いますが、与えられた答えに関して新しい視点をもたらすと思いました。 アスペクト指向プログラミングは、横断的関心事を実装しようとしているものをより良く達成するかもしれません。

実装の詳細をさまざまな制御方法に解析できる堅牢な連想ソリューションを探しています。 Spring framework はこの分野で非常に顕著であり、最近ではマイクロサービスに関連付けられることがよくあります。

0
Chad Harrison