@Test
void partitionProcessorTest() throws Exception {
EventData eventData = new EventData(body);
// below line code for finding nested class
Class<?> []clazz = eventData.getClass().getDeclaredClasses();
// and this is my inner class object
Class<?> inner = clazz[0];
// this is my inner class constructer
Constructor<?> constructor = inner.getDeclaredConstructor();
constructor.setAccessible(true);
Object obj = constructor.newInstance();
// this is my sequenceNumber field. which is private final Long type, in inner class
Field f = inner.getDeclaredField("sequenceNumber");
f.setAccessible(true);
//I am trying to remove final keyword from declared field in my inner class
Field filed= Field.class.getDeclaredField("modifiers");
filed.setAccessible(true);
filed.setInt(f, f.getModifiers() & ~Modifier.FINAL);
// but iam getting exception, where i am donig mistake please suggest me
// In this line i am getting exception --> f.setLong(eventData , 10l);
try{
f.setLong(eventData , 10l);
}
catch(Throwable e)
{
e.printStackTrace();
}
System.out.println(obj);
}
com.azure.messaging.eventhubs.models.eventcontext.updateCheckPoint(eventcontext.java:101)com.tdchannels.sdk.ms.channel.services.eventhubconsumerthread.lambda$new$0(eventhubconsumerthread.java:106)com.tdchannels.sdk.ms.channel.services.impl.eventhubconsumerthread.partitionprocessortest(eventhubconsumerserviceimplest.java:99)
无法将java.lang.long字段com.azure.messaging.eventHubs.EventData$SystemProperties.SequenceNumber设置为(long)10
根据跟踪,您正在将long原语设置为long object,请尝试将对象设置为long而不是long
像这样
Long aLong = Long.valueOf(100);
try{
f.setLong(eventData , aLong);
}
catch(Throwable e)
{
e.printStackTrace();
}
问题内容: 基于使用Java反射更改私有静态最终字段,我尝试设置私有静态最终字段。 (我知道这非常骇人,但是这个问题与代码质量无关;与Java反射有关。) 此打印 我已经使用OpenJDK 6和7,以及Oracle 7进行了尝试。 我不知道Java反射可以提供什么保证。但是,如果失败了,我以为会有一个(实际上所有反射方法都会抛出异常)。 这是怎么回事 问题答案: Java内联字段可在编译时初始化为
问题内容: 我想调用一个私有静态方法。我有名字 我听说可以使用Java反射机制来完成。我该怎么做? 编辑: 我在尝试调用该方法时遇到的一个问题是如何指定其参数的类型。我的方法收到一个参数,其类型为Map。因此,我不能这样做(在运行时,由于Java Type擦除,没有Map这样的东西)。是否有另一种方法来获得该方法? 问题答案: 假设您要调用MyClass.myMethod(int x);
问题内容: 我有一堂课,但不幸的是,我需要在运行时更改它。 使用反射我得到这个错误: 有什么办法可以改变价值? 问题答案: 假设没有阻止你执行此操作,则可以使用来绕开并重置修饰符以摆脱,并实际上修改字段。 这是一个例子: 假设没有SecurityException抛出,上面的代码将打印出来”Everything is true”。 实际执行的操作如下: 基本boolean值true和falsein
使用Java反射更改私有静态final字段 我按照上面链接中的说明使用java反射更改私有静态final字段。我有一个名为“数据”的对象在“data”内部,有一个名为“type”的私有静态最终变量我想将“type”设置为null。这是我的密码。 我试着在Java1.7上用类似的代码来做这件事,结果成功了。但是在Android上运行此代码会产生以下错误:java。lang.NoSuchFieldEx
问题内容: 我有2类:和 通过反思,我想在课堂上设置: 但我有一个例外: 线程“主”中的异常java.lang.NoSuchFieldException:a_field 但是,如果我尝试: 有用。 使用setter方法我有同样的问题: 问题答案: 要访问私有字段,您需要设置为true。您可以离开超类领域。此代码有效:
请注意,另一个项目是我从中使用的开源项目,仅用于分析,因此我不想使用它进行操作。 谁能帮帮我吗? 编辑: 这是我试图调用的方法: 错误似乎就在眼前: