阅读:这不是我产生异常的代码。这纯粹是建造者犯了这个错误。这不是与 indexoutofbounds 异常相关的任何问题的重复,因为它涉及书面代码。
我正在使用最新版本的 eclipse,当我尝试在工作区中构建任何项目时,出现以下错误
'Errors occurred during the build.
Errors running builder 'Java Builder' on project '[project]'.
offset 9673, count -7399, length 13677'
Run Code Online (Sandbox Code Playgroud)
查看日志会产生完整的堆栈跟踪:
!ENTRY org.eclipse.jdt.ui 4 0 2020-11-13 22:54:50.333
!MESSAGE Error in JDT Core during reconcile
!STACK 1
Java Model Exception: java.lang.StringIndexOutOfBoundsException: offset 9673, count -7399, length 13677
at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:324)
at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:192)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:268)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:596)
at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:1141)
at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:173)
at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:94)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:736)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:802)
at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1318)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:131)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:113)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:93)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at …Run Code Online (Sandbox Code Playgroud) 在我的一个程序中,我收到错误
invalid conversion from 'void* (*)()' to 'void*' [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
我试图了解这两种数据类型之间的区别。这很令人困惑。
我认为这些数据类型是:
void* (*)()所以这个数据类型是一个指向 void ( void*)的指针,它还有另一个指针 ( (*)),并且出于某种奇怪的原因,它有空括号。所以我想象的这种数据类型的内存看起来像|--void address--|--pointer of unknown type--|--something denoting no arguments--|
然后是void*。这看起来很简单,它只代表一个函数的地址。内存模型应该像|--void address--|.
为什么这么奇怪,是抛出错误的函数如下。
void callFunction(void *voidThing){
void *testVariable = voidThing;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这会创建一个指针类型的 testVariable,并且该指针指向 void。该函数还接受一个指针类型的参数,该指针也指向 void。
为什么编译器会抛出错误,即使局部变量与参数类型相同?就两者的内存占用而言,变量之间有什么区别?
我有这个界面
public interface Deserializable{
static <T> T deserialize(byte[] bytes) {
ReflectionDeserializer rd = new ReflectionDeserializer();
return rd.Deserialize(bytes);
}
}
Run Code Online (Sandbox Code Playgroud)
存在一个问题,ReflectionDeserializer 在其构造函数中需要一个类实例。在这种情况下,我想要传入的类是该implements语句所在的类的类,因此如果我有 public class Cat implements Deserializable,我希望将接口放入Cat.class构造函数中。
我该怎么做呢?