2012-03-01 4 views
1

java.io.File에 일부 필드를 추가하고이를 로컬로 jar로 컴파일합니다. 이제 해당 필드를 사용하는 응용 프로그램에서 가져 오려고합니다. 그러나 javac -classpath myio.jar Test.java은 컴파일되지 않습니다. 리플렉션을 사용하여 java -classpath myio.jar Test에 대해 런타임 오류가 발생했습니다. 해당 필드가 없습니다. 파일은 java.io로 패키지되어야합니다. 거기에 강제로 JVM로드 로컬 java.io.File 또는 금지 된 방법이 있나요?표준 사용자 대신 JVM에서 사용자 정의 java.io.File을로드하게하는 방법이 있습니까?

+2

왜이 작업을 수행 하시겠습니까? java.io.File이 제공하지 않는 것은 무엇입니까? –

+2

왜'File'을 하위 클래스로 만들지 않았습니까? – vulkanino

+1

이 권리를 갖자.'java.io.File'을 상속받은 클래스를 만들거나 단지'java.io.File'을 구현하면된다. 이게 어떻게 작동할까요? 왜 그것을'com.my.ExtendedFile' 또는 다른 것이라고 부르지 않고 코드에서 사용합니까? – Nim

답변

3

강제로 JVM이 로컬 java.io.File을로드 할 수 있습니까, 아니면 금지되어 있습니까?

금지되어 있습니다.

당신 수 가능 당신의 "정의"File 클래스를 컴파일하고 bootclasspath에에 추가하여이 문제를 해결 ...하지만이 실험이 아닌 다른이 작업을 수행 할 수있는 정말 나쁜 생각입니다.


이 때문에 안드로이드의입니다. 그들에는 다른 자바 코어 라이브러리 구현이 있습니다. 일부 파일을 이식하려고합니다.

Android에서 Java (TM)로 코드를 이식하려면 플랫폼을 변경하지 않고 플랫폼 종속성을 제거하도록 코드를 변경해야합니다.

+0

포인터 주셔서 감사합니다! – Oxdeadbeef

0

사실, jdk의 파일 클래스가 먼저로드되므로 클래스가로드되지 않습니다. 클래스를 jdk (rt.jar)에 넣을 수 있습니다. 컴파일 오류가 없으면 제대로 작동합니다.

관련 문제