根据我在java中的知识,我知道,Java语言中没有运算符重载.那么,为什么这段代码会两次打印'true'?
String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2);
Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1==i2);
Run Code Online (Sandbox Code Playgroud) Java类java.util.Locale具有一组public static final用于语言/国家/ 地区的字段,用于直接引用特定区域设置.其他语言环境可以通过适当的构造函数轻松使用.
但是,值的选择对我来说似乎相当武断.
语言是(按照它们出现在源中的顺序):英语,法语,德语,意大利语,日语,韩语,中文,简体中文,繁体中文
这些国家是:法国,德国,意大利,日本,韩国,中国,中国,台湾,英国,美国,坎达和加拿大法国(适用于当地的fr_CA).
有没有人有想法(甚至猜测)那些语言/国家如何选择?
我从apt工具页面读到,可以创建AnnotationProcessors来生成新的派生文件(源文件,类文件,部署描述符等).我正在寻找这样做的例子.
我需要在编译时对所有带注释的字符串进行编码,以便读取类文件不允许读取静态字符串:
基本代码:
String message = (@Obfuscated "a string that should not be readable in class file");
Run Code Online (Sandbox Code Playgroud)
应该重新修改为:
String message = new ObfuscatedString(new long[] {0x86DD4DBB5166C13DL, 0x4C79B1CDC313AE09L, 0x1A353051DAF6463BL}).toString();
Run Code Online (Sandbox Code Playgroud)
基于ObfuscatedString.obfuscate(String)TrueLicense框架的静态方法,处理器可以生成代码以替换带注释的字符串.实际上,这个方法生成字符串"new ObfuscatedString([numeric_code]).toString()".在运行时,ObfuscatedString的toString()方法能够返回在数字代码中编码的字符串.
关于如何编写AnnotationProcessor的process()方法来编辑带注释的代码的任何想法?
提前致谢,
我们已经拆分了应用程序,以便程序包A处理来自一个外部源和来自另一个外部源的数据包.在这两种情况下,我们都需要创建一个域对象并使用"Transformer"来执行此操作.
所以我有com.foo.bar.a.ThingTransformer和com.foo.bar.b.ThingTransformer
我怀疑这是不好的做法,但想看看SO的优秀人才.
给出了泛型教程中的这个例子.
List<String> list = new ArrayList<>();
list.add("A");
// The following statement should fail since addAll expects
// Collection<? extends String>
list.addAll(new ArrayList<>());
Run Code Online (Sandbox Code Playgroud)
为什么最后一行不能编译,它似乎应该编译.第一行使用非常相似的构造并编译没有问题.
请详细解释.
让我们有以下类层次结构:
public class MyType {
}
public class MySuperclass<T extends MyType> {
protected Map<String, String> myMap = new TreeMap<String, String>();
protected String myMethod(String s) {
return myMap.get(s);
}
}
public class MySubclass extends MySuperclass {
@Override
protected String myMethod(String s) {
return myMap.get(s); // <-- compilation error
}
}
Run Code Online (Sandbox Code Playgroud)
为什么在overriden方法中存在编译错误MySubclass?错误消息是"类型不匹配:无法从对象转换为字符串".
有趣的是,如果我MySuperclass在MySubclass定义中定义泛型类类型,则编译错误消失了:
public class MySubclass extends MySuperclass<MyType> {
@Override
protected String myMethod(String s) {
return myMap.get(s);
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释这种行为吗?我认为这是一个Java编译器错误.
我正在使用jdk1.6.0_24.
首先,如果我错了,请纠正我.我想在ArrayList<CustomType>不使用For循环的情况下找到Item的索引(即字符串值).
POJO:
id;
name;
Run Code Online (Sandbox Code Playgroud)
码:
ArrayList<POJO> list = new ArrayList<POJO>;
//Lots of data added to these list...
Run Code Online (Sandbox Code Playgroud)
现在我想从arraylist中找到特定名称的id而不使用下面的for循环.
String id = null;
// TODO Auto-generated method stub
for (int i = 0; i < list.size(); i++) {
if("ABCD".equalsIgnoreCase(list.get(i).getName())) {
id = list.get(i).getId();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我不想实现For循环,因为在某些情况下,我在List中有500多个数据,并且使用For循环查找索引不是一个好方法.
我正在开发的项目有一个需要AES加密和解密的段.从我可以查找的所有可能的互联网资源中,很难找到任何AES256加密的参考,而无需从Sun(现在的Oracle网站)下载和安装Unlimited Strength JCE文件.除了分发相同的法律问题之外,在要求最终用户访问特定网站并下载某些文件,将它们放入目录然后将内容添加到类路径时,它实际上并没有帮助我们.在Windows等!
在互联网上有一些关于BountyCastle的轻量级API的引用可能不需要JCE文件,但我无法查找一个非常相关的参考或示例.
不确定,但这是其他所有编程语言的问题吗?
如果没有安装了那些特定JCE文件的AES 256位加密,那么JNI方法可以帮助吗?
为了详细说明,AES 256加密可以在C/C++中完成,然后我可以调用那些使用JNI获得所需结果吗?打包软件(作为jar文件)会引起关注,还是会出现其他问题?
另一个重要的因素是该项目将同时运行Mac和Windows,因此可能是使用C/C++(特定编译器/解释器版本或任何东西)的限制?
有没有不同的方法来处理这个?还有其他方法吗?
java ×10
generics ×2
aes ×1
annotations ×1
apt ×1
arraylist ×1
coding-style ×1
encryption ×1
indexof ×1
java-7 ×1
locale ×1
overloading ×1
packages ×1
search ×1
windows ×1