긴 시간 lurker, 처음 포스터 여기. 검색을 시도했지만 문제를 해결할 수있는 항목을 찾을 수 없습니다.리플렉션에서 java.so.NoSuchFieldException이 발생 했습니까?
기본적으로 폐쇄 형 소스 모듈에 몇 가지 기능을 추가하려면 게임 모드 용 애드온을 쓰고 있습니다. 닫혀 있고 원래 개발자는 일본어이므로 반성이 최선의 방법 일 가능성이 높습니다.
필요한 모든 클래스의 배열을 가져올 수 있지만 모든 필드의 값을 가져올 수 없습니다. 엔티티가 움직일 때 (그리고 움직이는 경우에만) 물건을 할 수 있도록 "currentThrottle"값을 가져와야합니다.
다음은 현재 코드입니다. 왜 작동하지 않는지 알 수 없습니다. 왜냐하면 내가 볼 수 있듯이 if 문을 사용하여 필드가 존재하는지 확인한 다음 여전히 발견 할 수 없다고 알려주기 때문입니다.
최종 메모; 나는 완전히 자바에서 교육 받았고, 내가 아는 모든 것은 이것과 같은 포럼을 읽고 단지 다이빙을하고 그것을 가지고 노는 것입니다; 그것이 내가 배우는 최선의 방법입니다.
Object value = field.get(objValue);
하는 것이되어야한다 여기에 어떤 정말 나쁜 관행이 있다면 그래서, 내가 당신이에서 필드를 얻으려면 :
Class planeClass = Class.forName("mcheli.plane.MCP_EntityPlane");
Field[] fields = planeClass.getFields();
//Some other irrelevant code
for (Field field2 : fields) {
String name = field2.getName();
if (name.contains("currentThrottle")) {
System.out.println("name: " + name);
try {
field = baseClass.getClass().getField(name);
field.setAccessible(true);
Class<?> targetType = field.getType();
Object objValue = targetType.newInstance();
Object value = field.get(objValue);
System.out.println("Throttle: " + value);
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'baseClass' 무엇입니까? 그리고 왜'field2'를 사용하지 않습니까? –
반성하는 수업을 게시하십시오. –