0

私は非常に基本的な疑問を持っています。このリンクから次の行を理解するのを手伝ってください http://docs.oracle.com/javase/1.5.0/docs/guide/xml/jaxp/JAXP-Compatibility_150.html

「JAXP 1.3参照名の解決策は、実装で使用されるApacheライブラリのパッケージ名を変更することです。その変更により、クラスパスで新しいApacheライブラリを参照できるようになるため、アプリケーション開発者は、他のアプリケーションを使用するのと同じ方法でそれらを使用できます。 Javaプラットフォームへのその他の追加」

クラスパスの参照ライブラリから同じ名前のクラスで jre の内部実装クラスをオーバーライドする方法は? 注:内部パッケージ名の名前を変更するためのラッパーパッケージのみを提供したと想定しているため、内部パッケージ名は引き続き存在するはずです。

詳しく説明してください。

前もって感謝します!!!アナンド

4

1 に答える 1

0

以前は、一部の org.apache パッケージが完全な org.apache パッケージ名で「そのまま」JRE jar に含まれていました。

これは、私のクラスがたとえば Xerces DomUtil を使用したい場合、

import org.apache.xerces.util.DOMUtil;

ルート クラスローダーは、このクラスを JRE の Xerces のバージョンに解決します。

Xerces の新しいバージョンまたは別のバージョンを使用したい場合、それをアプリケーションのクラスパスに含めることができませんでした。これは、クラスローダー システムが JRE にパッケージ化された Xerces を優先するためです。

今、この状況は変わりました。彼らは org.apache パッケージを取り、それらを com.sun.org.apache...internal... に変更しました。

したがって、JRE と一緒にパッケージ化された Xerces を直接使用したい場合は、以下をインポートできます。

import com.sun.org.apache.xerces.internal.util.DOMUtil;

(Eclipse は、com.sun 内でパッケージを使用しないようにというエラーを表示します .. しかし、それでもクラスはそこにあり、必要に応じてアクセス制限を変更できます)

このバージョンは、JAXP などのすべての JRE クラスで使用されます。

これにより、Xerces の場合はクラスパスに新しいバージョンを自由に配置し、JRE のものに干渉することなくアプリケーションから使用できます。

パッケージの名前を変更するだけで再パッケージ化されました。これは、たとえば、フォルダーから移動することを意味します

org/apache/xerces/util

フォルダへ

com/sun/org/apache/xerces/internal/util

一部のJRE担当者のハードドライブで、.javaファイル内を変更すると、

package org.apache.xerces.util;

package com.sun.org.apache.xerces.internal.util;

したがって、JVM の観点からは、これらはまったく異なるクラスです。

于 2014-09-05T18:46:02.487 に答える