如果我有一个布尔字段,如:
private static final boolean DEBUG = false;
在我的代码中我有如下声明:
if(DEBUG) System.err.println("err1");
Java预处理器是否只是删除了if语句和无法访问的代码?
我知道,由于模糊性问题,抽象类和接口都不能包含抽象和静态的方法,但有没有解决方法?
我希望有一个抽象类或一个接口,它要求在所有扩展/实现此类/接口的类中包含静态方法.有没有办法在Java中这样做?如果没有,这可能是我与Java的最后一根稻草......
编辑1:这个问题的背景是我有一堆类,现在称它们为Stick,Ball和Toy,它们在数据库中有一堆条目.我想创建一个名为Fetchable的超类/接口,它需要getFetchables()在它下面的每个类中使用静态方法.Stick,Ball和Toy中的方法必须是静态的原因是因为它们将与数据库通信以检索数据库中每个类的所有条目.
编辑2:对于那些说你不能用任何语言做到这一点的人,那是不正确的.你当然可以在Ruby中继承类方法.这不是某人没有获得OO的情况,这是Java语言中缺少功能的情况.您可以尝试争辩说您永远不需要继承静态(类)方法,但这是完全错误的,我将忽略任何提出这些要点的答案.
好的,所以我一直在为我的国际象棋程序工作一段时间,我开始碰壁了.我已经完成了所有的标准优化(negascout,迭代深化,杀手动作,历史启发式,静态搜索,典当位置评估,一些搜索扩展),我完全没有想法!
我希望尽快让它多线程化,这应该会给我带来很好的性能提升,但除此之外还有其他任何狡猾的技巧吗?我考虑过切换到MDF(f),但我听说这是一个麻烦,并不值得.
我最感兴趣的是某种学习算法,但我不知道是否有人用国际象棋程序有效地完成了这项工作.
那么,切换到一块板有意义吗?我目前正在使用0x88.
这个问题一直困扰着我.我必须在我的java应用程序中加载几个文件,到目前为止我工作的唯一方法是这样的:
URL hsURL;
if(System.getProperty("os.name").toLowerCase().contains("windows")) {
hsURL = new URL("file:/" + System.getProperty("user.dir") + "/helpsets/helpset.hs");
}
else {
hsURL = new URL("file://" + System.getProperty("user.dir") + "/helpsets/helpset.hs");
}
Run Code Online (Sandbox Code Playgroud)
但这是丑陋可怕的.有一段时间我以为我有这个工作:
hsURL = ClassLoader.getSystemResource("helpsets/helpset.hs");
Run Code Online (Sandbox Code Playgroud)
但是由于某些原因它不再起作用(我必须改变一些东西而不是注意到它.它返回null.
我应该使用getResource()而不是getSystemResource()(如果是这样,为什么getSystemResource()是静态的而不是getResource())?
我正在使用eclipse,我尝试在构建路径(classpath)中包含该文件夹而不包括它,它似乎没有什么区别.
我正在尝试将第三方jar添加到我的java库路径中.如果我调用SBT用-Djava.library.path=a-3rd-party-lib.jar,那么它适用于在第一次调用的run-main MyClass内部SBT,但此后的第三方代码抱怨说罐子是不是在Java库路径.我也尝试添加javaOptions += "-Djava.library.path=a-3rd-party-lib.jar"到我的build.sbt文件,但这没有用(即使是第一次运行).将此命令限定为javaOptions in (Test,run) += "-Djava.library.path=a-3rd-party-lib.jar"(如文档中所示)也无效.
我做错了什么,或者这是一个奇怪的错误?
仅供参考我使用sbt 0.13.0
我需要在Java中的一些long,int和short中找到最高阶1.例如,如果我有一个看起来像的char 00110101,我需要一个返回2的方法(最高阶1的索引).
现在,我知道您可以使用for循环执行此操作,如:
for(int i=0; i<8; i++)
if((x & 1<<i) != 0) return i;
return -1;
Run Code Online (Sandbox Code Playgroud)
但这比我想做的慢.我知道现代CPU有指令在芯片上执行此操作,所以我想知道如何调用它而不是有一个显式循环.
编辑:如果你可以返回原语中所有的索引,就可以获得奖励积分.
谢谢.
我粗略地了解了#include对C预处理器的作用,但我完全不理解.现在,我有两个头文件,Move.h和Board.h,它们都是typedef各自的类型(Move和Board).在两个头文件中,我需要引用另一个头文件中定义的类型.
现在我在Board.h中有#include"Move.h",在Move.h中有#include"Board.h".当我编译时,gcc翻转并给我一个很长的(看起来像无限递归)错误信息在Move.h和Board.h之间翻转.
如何包含这些文件,以便我不会无限期地递归包含?
我有这个JTextPane(包裹在一个JScrollPane)由一个支持HTMLEditorKit.该内容JTextPane是简单的HTML,其中一些图像(本地文件)使用img标签嵌入.问题是当你加载JTextPane它时,需要一瞬间加载,然后它会在页面底部出现滚动条.如果我做:
JTextPane text = new JTextPane();
JScrollPane scroll = new JScrollPane(text);
// do some set up...
scroll.getVerticalScrollBar().setValue(0);
Run Code Online (Sandbox Code Playgroud)
它暂时设置滚动条,然后另一个thead(可能是负责加载图像)来并将滚动条敲回底部.我尝试添加:
((AbstractDocument)text.getDocument()).setAsynchronousLoadPriority(-1);
Run Code Online (Sandbox Code Playgroud)
但这并没有解决它.有没有办法从任一得到一个事件text.getDocument()或text当窗格完成加载,这样我可以设置滚动条,然后会通知我吗?另一种方法是我设置另一个线程等待一秒左右,然后设置滚动条,但这是一个糟糕的黑客.
你的建议?
java ×5
algorithm ×1
chess ×1
classloader ×1
events ×1
file ×1
gcc ×1
html ×1
include ×1
inheritance ×1
interface ×1
optimization ×1
preprocessor ×1
sbt ×1
swing ×1