我用object != null了很多东西来避免NullPointerException.
有没有一个很好的替代品呢?
例如:
if (someobject != null) {
someobject.doCalc();
}
Run Code Online (Sandbox Code Playgroud)
NullPointerException当不知道对象是否存在时,这避免了a null.
请注意,接受的答案可能已过期,请参阅/sf/answers/167020941/以获取更新的方法.
我有一个类定义自己的枚举,如下所示:
public class Test
{
enum MyEnum{E1, E2};
public static void aTestMethod() {
Test2(E1); // << Gives "E1 cannot be resolved" in eclipse.
}
public Test2(MyEnum e) {}
}
Run Code Online (Sandbox Code Playgroud)
如果我指定MyEnum.E1它工作正常,但我真的只想把它作为"E1".知道如何实现这一目标,还是必须在另一个文件中定义才能实现这一目标?
结论:我无法获得导入正确的语法.由于有几个答案表明这是可能的,我将选择一个能够提供我所需语法的语言,并提升其他语法.
顺便说一句,这是一个REALLY STRANGE的一部分(在我让静态导入工作之前),我写的一个使用枚举的switch语句不允许enum以其类型为前缀 - 所有其余的代码需要它.伤了我的脑袋.
工作中的某个人刚刚询问了必须在同步中包装等待的原因.
老实说,我看不出推理.我理解javadocs所说的 - 线程需要成为对象监视器的所有者,但为什么呢?它会阻止哪些问题?(如果它确实是必要的,为什么等待方法不能获得监视器本身?)
我正在寻找一个相当深入的原因,或者可能是对文章的引用.我在快速谷歌中找不到一个.
哦,还有,thread.sleep如何比较?
编辑:很好的答案 - 我真的希望我可以选择不止一个,因为他们都帮助我理解发生了什么.
我经常通过在我正在处理的类中创建一个内部类来重构代码 - 当我完成后,我将整个事物移动到一个新的类文件中.这使得重构代码变得非常容易,因为A)我只处理单个文件,而B)我不会创建新文件,直到我对名称/名称有很好的了解(有时它最终会不止一个班).
有没有什么方法Eclipse可以帮助我完成最后的行动?我应该能够告诉它我想要该类的包,它可以从类名和包中的目录中找出文件名.
这似乎是一个微不足道的重构,而且非常明显,但我无法弄清楚击键/手势/无论如何实现它.我尝试过拖动,菜单,上下文菜单以及浏览键盘快捷键.
谁知道这个?
[edit]这些已经是这个文件中的"顶级"类,而不是内部类,而"Move"似乎不想为我创建一个新类.这是我通常做的艰难的方式 - 涉及外出,创建一个空课,回来和移动.我想一步完成整个过程.
我正在学习maven,同时在一个有大量项目要构建的项目上工作.
目前,主构建中的一行使用绝对路径来指定一个目录,该目录是subversion存储库的一部分,但在其目录的"上方".
如:"C:/ work/project/eclipse",其中"project"是签入目录,pom.xml位于"C:/work/project/src/subproject/pom.xml"中
我想将该行改为相对地址.
我试着指定"../../ Eclipse ....",把它看起来似乎不起作用.
也可能是因为子子项目的pom文件正在使用相同的变量.
任何建议(除了重写整个混乱,我只是不知道maven还没有)?
对不起,我对Ant不是很有经验.
我喜欢eclipse"Export ant buildfile"函数,但我需要插入一些自定义任务(复制文件,计算运行时使用的校验和等).
如何将自定义ant任务与Eclipse导出的antfile集成?此外,一旦我这样做,内部构建(运行...)会捡起它还是我总是必须使用外部ant文件来构建从现在开始?
哦,我不想编辑从Eclipse导出的build.xml,因为我希望以后能够重新生成它.
编辑/更新:
我花了一段时间才弄明白发生了什么 - 所以我想我会在这里做一些笔记来澄清.
当您在目录中创建一个新的ant文件并放在<?eclipse.ant.import ?>自定义ant脚本的第一行(我称之为我的test.xml)时,下次将构建文件从Eclipse导出到该目录时,它会看到该标记并添加<import file="test.xml"/>
使用该导入,"自定义"文件(test.xml)中的目标将成为导出的build.xml中的有效目标(或者在导出时选择的任何名称).
在此之后,只要您在Eclipse中选择"build.xml",目标窗格也将包含来自"test.xml"的目标
此外,在此之后,您可以进入项目属性/构建器并添加"Ant Build"类型的新构建器,然后选择要用于构建,清理等的目标.
我希望Selenium通过箭头键导航菜单 - 从单击顶部菜单项开始,然后按"DOWN","DOWN",...
问题是你必须总是提供一个特定的元素来发送"DOWN".
有没有办法获得当前元素?
我试过了:
by.xpath(".")
Run Code Online (Sandbox Code Playgroud)
但它表示表达未被识别或未返回正确的对象.
我希望我能错过一些愚蠢的伎俩.
我想在Java应用程序中"尾随-f"很多日志文件.
我通过监视大小和上次更新并重复打开文件并在文件大小或上次更新时间发生变化时读取最后几个字节 - 然后立即关闭它来实现此功能.
这似乎有问题,因为当记录器决定重命名文件时,我可能会打开它,这会导致某种问题.
我还想检测一个"Rolled"文件,其机制更加确定,而不是注意到文件大小减少......似乎容易出错,但不太可能.
由于我似乎无法访问文件描述符或其他低级文件实用程序,因此我可能无法重现尾部的行为 - 但是有没有任何技巧来读取文件而不将其"锁定"以进行重命名/删除( Windows 7的)
我想另一种可能性是实际产生一个尾部-f进程并读取进程输出,但这看起来有点沉重 - 我在这里扫描了60个日志文件,其中一些有很多输出(大部分将是空闲的).
我刚刚编写了一些代码来缩放字体以适应矩形(长度).它从18宽度开始并向下迭代直到它适合.
这似乎非常低效,但我找不到一种非循环方式来做到这一点.此行适用于可缩放的游戏网格中的标签,因此我无法看到解决方案(包裹,切断和延伸超过矩形都是不可接受的).
它实际上非常快,我正在为数百个矩形做这个,它的速度足以让它减慢触摸速度.
如果没有人提出更好的东西,我只会从表中加载起始猜测(因此它比18更接近)并使用它 - 除了延迟效果很好.
public Font scaleFont(String text, Rectangle rect, Graphics g, Font pFont) {
float nextTry=18.0f;
Font font=pFont;
while(x > 4) {
font=g.getFont().deriveFont(nextTry);
FontMetrics fm=g.getFontMetrics(font);
int width=fm.stringWidth(text);
if(width <= rect.width)
return font;
nextTry*=.9;
}
return font;
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个嵌入式系统,它使用一个串口进行所有日志记录.
是否有一个工具允许您将行过滤到不同的窗口(或完全删除它们),以便我可以分离各种日志记录子系统的输出并删除每秒多次显示的垃圾邮件?
我更喜欢开源解决方案,但强烈推荐的封闭式产品可能会这样做.