我已经知道如何在实体类中的特定属性上添加基于注释的验证,例如:-
public class Person {
@NotNull
private String firstName;
private String lastName;
//...
}
Run Code Online (Sandbox Code Playgroud)
但是是否可以在类 Person 上添加注释,以便通过创建自定义验证类并在某处处理验证来验证该类中的所有属性,例如:-
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface PersonneName {
public String firstName();
}
Run Code Online (Sandbox Code Playgroud)
我正在开发一个项目,从数据库获取约束并创建自定义验证类,并根据从数据库获取的约束应用于实体类属性。请建议。
我陷入了需要检查嵌套 JSON 对象中是否存在键的情况。通过嵌套的 JSON 对象,我在父 JSON 对象中有一个 JSON 对象作为其键之一的值。所以我需要检查这个键是否存在于整个 JSON 对象中。我将以下数据作为String对象。我知道我可以解析这个String对象来获取 JSON 对象。
{
"claim_loss_type_cd": "TEL",
"claim_type": "002",
"claim_reason": "001",
"policy_number": "1234kk3366ff664",
"info": {
"ApplicationContext": {
"country": "US"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经使用containsKey()方法来检查主 JSON 对象中的密钥是否存在并且它有效。但是为了检查像“info”这样的任何内部 JSON 对象,我需要Object再次将其解析为 JSON 对象,然后再次检查密钥。
String jsonString = "My JSON String here";
JSONObject finalResponse = new JSONObject(jsonString);
finalResponse.containsKey("country"); // will return false
JSONObject intermediateResponse = (JSONObject)finalResponse.get("info");
intermediateResponse.containsKey("country"); // will return true
Run Code Online (Sandbox Code Playgroud)
那么有没有更好的方法,任何可以检查任何内部 JSON 对象内部的 API 或方法,而无需解析内部 JSON 对象。我正在将com.ibm.json.java.JSONObject.JSONObject() …
最近我创建了一个包装器来读取和写入数据到一个byte数组中。为此,我一直在使用ArrayList<Byte>,但我想知道这是否是最有效的方法,因为:
addAll()不适用于byte数组(即使使用Arrays.asList(),它返回 me List<Byte[]>)。为了修复它,我只是循环并byte在每个循环中添加一个,但我想这假设了很多函数调用,因此它具有性能成本。byte[]从ArrayList。我无法从Byte[]to投射byte[],所以我必须使用循环。我知道ByteArrayInputStream并且ByteArrayOutputStream可以用于此,但它有一些不便之处:
readInt,readLEInt、readUInt、 等),而这些类只能读取/写入字节或字节数组。这不是真正的问题,因为我可以在包装器中修复它。但是第二个问题来了。ByteArrayInputStream和ByteArrayOutputStream。我不知道这些是否可以以某种方式同步,或者我每次写入包装器时都必须将一个的整个数据写入另一个。所以,我的问题来了:使用 aByteBuffer会更有效吗?我知道您可以从中获取integers,floats等,甚至可以更改字节顺序。我想知道的是,使用 aByteBuffer和 a之间是否存在真正的性能变化ArrayList<Byte>。
我正在同char[],并Collection与下面的代码: -
char[] ch = { 'a', 'b', 'c' };
List<char[]> chList = new ArrayList<char[]>();
chList.add(new char[]{'d','e','f'});
chList.add(new char[]{'g','h','i'});
String chSt = String.valueOf(ch);
String chListSt = chList.toString();
System.out.println(chSt); // outputs abc
System.out.println(chListSt); // outputs [[C@8288f50b, [C@b6d2b94b] instead [def, ghi]
Run Code Online (Sandbox Code Playgroud)
现在我在上面观察到的是: -
String chSt = String.valueOf(ch);
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码的行为是正确的char[]的String.valueOf(),所以上面的代码abc被打印出来.现在考虑下一行.
String chListSt = chList.toString();
Run Code Online (Sandbox Code Playgroud)
同样对于上面的代码我知道toString()for List是在AbstractList这个overriden的代码中定义的,toString()我发现buffer.append(next);哪个调用String.valueOf()方法char[]对应于next这里.
因此,它也应该打印像[def, ghi] …
我工作String,并试图split()对.像: -
String s = "Hi.Hello";
System.out.println(Arrays.toString(s.split(".")));
Run Code Online (Sandbox Code Playgroud)
上面的代码输出[]空数组.但如果我逃脱.:
String s = "Hi.Hello";
System.out.println(Arrays.toString(s.split("\\.")));
Run Code Online (Sandbox Code Playgroud)
它给出了正确的输出[Hi, Hello].
所以我想知道: -
为什么我需要逃避,.但.它通常不被认为是String我们可以.直接使用的转义字符.
我正在和varargs一起工作并且知道: -
public void myMethod(String... args, int val){}
Run Code Online (Sandbox Code Playgroud)
方法myMethod的变量参数类型String必须是最后一个参数.
如果两者都一样String,错误它的给定是相当的,但在这种情况下,我设置int为第二个参数,所以在运行时JVM可以检查参数的类型,可以区分如下: -
myMethod("HI", "HELLO", 9)
Run Code Online (Sandbox Code Playgroud)
这不可行吗?我遗漏的任何其他要点都会产生错误?
我正在缩小范围并检查以下代码: -
int i = 131072;
short s = (short)i;
System.out.println(s); //giving 0
Run Code Online (Sandbox Code Playgroud)
这种缩小正在输出0.我无法理解背后的逻辑.
java ×6
arraylist ×1
bytebuffer ×1
class-level ×1
collections ×1
constraints ×1
json ×1
string ×1