2017-10-29 1 views
0

Eclipse와 Netbeans를 사용 중이며 Netbeans를 선호합니다. Java 라이브러리에있는 시스템 클래스 (예 : FileReader)를 개발하는 경우 해당 클래스를 응용 프로그램에 추가하고 로컬 복사본을 라이브러리 사본으로 대체 할 수 있습니까?Java 응용 프로그램에서 라이브러리 클래스를 무시할 수있는 방법이 있습니까?

아이디어는 정상적인 jdk를 사용하면서 한 번에 특정 클래스를 보강하기 위해 노력할 수있는 것입니다.

특히 java.lang.StringBuilder 및 java.io.FileWriter로 작업하고 있습니다.

수정 된 StringBuilder 클래스를 작성했습니다. 내 디렉토리에 그것을 만들면 : java/lang/FastStringBuilder

javac는 제한된 패키지 java.lang을 컴파일하려고하고 있다고 말합니다.

패키지의 이름을 변경하면 public이 아닌 AbstractStringBuilder에서 상속 할 수 없습니다.

그들은 그들이 필요로하는 것보다 더 열심히 만들고 있습니다. 대신

import java.io.FileReader; 

+4

다른 패키지에서 같은 이름을 사용하세요! –

+0

하지만 '같은 이름을 가진 수업을 사용 하시겠습니까?'라는 뜻입니까? 예를 들어 자신의 수업을 제공하고 싶습니까? 'java.io.Filereader'? 두 번째 경우의 클래스 패스 작업입니다. –

+1

제가 생각할 수있는 것은'/ lib/ext' (https://docs.oracle.com/javase/tutorial/ext/basics/install.html)입니다. 그것이 비록 일할 것 인 지 명확히하지 않는다. – electrotype

답변

1

당신은 표준 일 대신 구현을 사용하는

import package.of.your.FileReader; 

이 필요합니다.

+0

자, 저는 StringBuilder를 사용하고 있습니다. 다른 패키지에서 하나를 만들면 비 public 클래스 인 AbstractStringBuilder에 대한 공유 액세스 권한이 없습니다. – Dov

+0

@Dov - 그렇습니다. 'java.util.MyStringBuilder'를 작성하면 (자), java.util 패키지 내의 모든 비공개 클래스 및 비공개 클래스 및 그 프로퍼티/메소드에 액세스합니다. 하지만 여전히 java.util.StringBuilder를 재정의하지는 않습니다. 'StringBuilder'와'MyStringBuilder' 클래스가 있습니다. – Vadim

4

자바에서 정말 정말 좋은 생각입니다.

자신 만의 FileReader가 필요합니까? - 귀하의 패키지에 넣고 사용하십시오.

표준 FileReader의 메서드를 사용해야합니까? - 확장하거나 자신의 FileReader에 포장하고 그것을 사용하십시오.

그러나 JDK 또는 기타 타사 프레임 워크의 위치에 관계없이 모든 라이브러리의 클래스를 교체하려고 절대로 시도하지 마십시오.

아주 드물지만 나쁜 경우에는 AOP를 사용할 수 있지만 정말 고통스럽고 또 다른 "나쁜 아이디어"입니다.

+0

자바로 다시 제안 할 라이브러리 클래스의 변경 작업을 수행 중이라면 모든 소스 코드로 프로젝트를 빌드 할 필요가 없으며 프로젝트 내에서 실험하면서 원하는 클래스를 편집해야합니다. 나에게는 해결 방법이 있어야하는 것처럼 보였다. 필자는 데이터를 공유하기 위해 기본 액세스를 사용하는 동일한 패키지에 파일이 없으면 패키지 이름을 변경하는 것이 좋은 해결 방법 일 수 있다고 생각합니다. – Dov

+0

다른 패키지 이름을 사용하면 "무시"라고 부를 수 없습니다. 다른 패키지에있는 또 다른 클래스이며 올바른 Java 접근 방식입니다. 당신은 자신의 수업을 만들었습니다 - 당신은 그것을 사용합니다. 표준 구현은 있지만 사용하지는 않습니다. 괜찮아. 하지만 ... 수업을 과부하로 만들 생각이라면 ("표준을 대체하십시오"라고 말하십시오.) 절대로 그렇게하지 마십시오. – Vadim

관련 문제