在查看Android Studio的Analyze选项卡中的各种选项时,我遇到了一个名为"推断无效"的选项.我很好奇这个工具应该如何使用以及它能为我的Android Studio项目做些什么?
一般问题:equals在Java中实现默认方法的覆盖时,我应该关注简单地利用已经实现的compareTo方法与将独立逻辑写入equals方法?我注意到有人在另一个问题中提到了foo.equals((String)null)返回false然后String.compareTo((String)null)抛出一个NullPointerException.是什么让这些不一致的结果成为理想的功
样品equals方法:
@Override
public boolean equals(Object obj) {
if (obj != null && obj instanceof MyClass) {
MyClass msg = (MyClass)obj;
return this.compareTo(msg) == 0;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
编辑: 引用可比较文档
当且仅当e1.compareTo(e2)== 0与c1的每个e1和e2的e1.equals(e2)具有相同的布尔值时,C类的自然排序被认为与equals一致. null不是任何类的实例,并且e.compareTo(null)应该抛出NullPointerException,即使e.equals(null)返回false
编辑:
经过进一步审查后,我发现可比较文件还说明了以下内容:
实现者必须确保所有x和y的sgn(x.compareTo(y))== -sgn(y.compareTo(x)).(这意味着如果y.compareTo(x)抛出异常,x.compareTo(y)必须抛出异常.)
因为null.compareTo(x)显然会抛出一个NPE,所以也x.compareTo(null)应该抛出一个NPE.而对于平等,情况不一定如此.我对NPE的正确处理非常重视,所以我发现这个相对重要.
3个问题:
下面是JUnit的两个maven依赖项.我一直在搜索互联网几个小时,似乎无法确定第二个是Javadoc +代码还是只有Javadoc.我需要一个还是两个?此外,将Javadocs包含在开发项目中而不是生产构建中的最有效方法是什么?(我不希望为每台机器上的每个依赖项手动下载javadoc.)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<classifier>javadoc</classifier>
</dependency>
Run Code Online (Sandbox Code Playgroud)
编辑:问题:
我在Spring中使用Jackson将我的类序列化为JSON.当我像下面的例子一样序列化一个类时,Jackson正在将某些字段的名称从Camel Case更改为小写.我知道我可以通过创建自定义(de)序列化器来解决这个问题,但我希望能够全局关闭它.也许通过在application.properties中设置属性.
根据默认的Jackson命名策略,这不应该发生:
如果没有注册的自定义策略,则使用默认的Java属性命名策略,它将字段名称保留为......
class Foo {
private final String firstName;
private final String aName;
private final String name;
private final String abName;
Foo(final String firstName, final String aName, final String name, final String abName) {
this.firstName = firstName;
this.aName = aName;
this.name = name;
this.abName = abName;
}
// Getters here
}
public static void main(String[] args) {
final ObjectMapper mapper = new ObjectMapper();
final Foo foo = new Foo("first", "a", "name", "ab");
final String jsonInString = …Run Code Online (Sandbox Code Playgroud) 在你开始之前; 是的我知道这是一个重复的问题,是的,我已经查看了发布的解决方案.我的问题是我无法让他们工作.
bool invalidChar (char c)
{
return !isprint((unsigned)c);
}
void stripUnicode(string & str)
{
str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());
}
Run Code Online (Sandbox Code Playgroud)
我在"Prusæus,Ægyptians"上测试了这种方法,它也没有做任何我试图替代isprint的方法isalnum
真正的问题发生在我的程序的另一部分我转换string-> wstring-> string.如果string-> wstring转换中有unicode字符,则转换为balks.
参考:
编辑:
我仍然想删除所有非ASCII字符,无论它是否有帮助,这里是我崩溃的地方:
// Convert to wstring
wchar_t* UnicodeTextBuffer = new wchar_t[ANSIWord.length()+1];
wmemset(UnicodeTextBuffer, 0, ANSIWord.length()+1);
mbstowcs(UnicodeTextBuffer, ANSIWord.c_str(), ANSIWord.length());
wWord = UnicodeTextBuffer; //CRASH
Run Code Online (Sandbox Code Playgroud)
错误对话框
MSVC++调试库
调试断言失败!
Program:// myproject
文件:f:\ dd\vctools\crt_bld\self_x86\crt\src\isctype.c
行://在上面
表达:(无符号)(C + 1)<= 256
编辑:
进一步复杂化问题:我正在读取的.txt文件是ANSI编码的.内部的一切都应该是有效的.
解:
bool invalidChar (char c)
{
return !(c>=0 && c <128);
} …Run Code Online (Sandbox Code Playgroud) 本着精心设计的OO的精神,我正在扩展的某个类别标志着其中一个领域受到保护.这堂课还慷慨地提供了一个公共的二传手,但没有吸气剂.
我正在使用一个基类来扩展这个类,而基类又由几个孩子扩展.如何限制对我的孩子的受保护变量的访问,同时仍然能够私下操纵它并公开设置它?
见下面的例子:
public abstract class ThirdPartyClass {
protected Map propertyMap;
public void setPropertyMap(Map propertyMap){
this.propertyMap= propertyMap;
}
// Other methods that use propertyMap.
}
public abstract class MyBaseClass extends ThirdPartyClass{
// Accessor methods for entries in propertyMap.
public getFoo(){
propertyMap.get("Foo");
}
public getBar(){
propertyMap.get("Bar");
}
// etc...
}
public class OneOfManyChildren extends MyBaseClass {
// Should only access propertyMap via methods in MyBaseClass.
}
Run Code Online (Sandbox Code Playgroud)
我已经发现,我可以通过使场撤销访问private final在MyBaseClass.然而,这也妨碍了使用超级类提供的setter.
我能够通过下面的"聪明"来规避这种限制,但它也会导致维护相同地图的两个副本以及复制每个元素的O(n)操作.
public abstract class MyBaseClass extends ThirdPartyClass{
private final …Run Code Online (Sandbox Code Playgroud) 我正在测试一个方法,它将两个对象作为参数并返回一个boolean.当我使用和assertTrue或assertFalse使用相关方法时,我得到以下测试失败:junit.framework.AssertionFailedError: null.
我知道我传递了无效参数,可能会在方法中引起NPE,但这不是正在发生的事情,而是测试失败了.
注意:我使用的boolean不是布尔值.
示例代码:
类:
public class MyClass{
public boolean foo(MyObject1 lhs, MyObject2 rhs){
//doSomething
//return something
}
}
Run Code Online (Sandbox Code Playgroud)
测试:
.... //initilization of myClass, etc.
@Test
public void testFoo(){
assertTrue(myClass.foo(new MyObject1(), new MyObject2());
}
Run Code Online (Sandbox Code Playgroud) 我在IntelliJ中定义了一个版权配置文件,因为Copyright ${today.year}, All Rights Reserved.它在新文件上效果很好,但是在现有文件上,我想将现有年份更新为某个范围,或将现有范围的结束日期更新为${today.year}。
IntelliJ支持在版权模板中使用Velocity。有没有办法利用Velocity做到这一点?据我所知,Velocity允许使用if语句,但我不确定如何获得前几年的变量。
例子:
新文件: Copyright 2018
Copyright 2017 至 Copyright 2017-2018
Copyright 2015-2017 至 Copyright 2015-2018
参考:
我需要从大约100个长达200,000行的XML文件中读取前15行.有没有办法使用像BufferedReader这样的东西来有效地做到这一点?本问题中概述的步骤使用DocumentBuilder.parse(String); 这会尝试立即解析整个文件.
编辑:前15个元素包含有关文件的元数据(页面名称,最后编辑的日期等),我想将其解析为表格.
我Dir.exists?在文档中查看了该方法,我相信我正确使用它,但在每次调用时我都遇到了这个错误:
未定义的方法`存在?' for Dir:Class(NoMethodError)
我忽略了一些非常明显的东西吗?以下是相关代码.
#!/usr/bin/ruby
ARGV.each do |dir| # Arguements are directory names.
if !Dir.exists?(dir)
#dosomething
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:
使用File.directory?而不是Dir.exists?修复我的程序,但没有解释这个错误.