尝试将除0之外的任何数字插入格式为NUMBER(2,2)的字段时,我遇到了该错误.
UPDATE
PROG_OWN.PROG_TPORCENTAJE_MERMA
SET
PCT_MERMA = 3
WHERE
IDN_PORCENTAJE_MERMA = 1
Run Code Online (Sandbox Code Playgroud)
[错误代码:1438,SQL状态:22003] ORA-01438:大于此列允许的指定精度的值
COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS
PCT_MERMA 3 NUMBER 2 0 2
Run Code Online (Sandbox Code Playgroud)
如果我尝试十进制数字也会发生这种情况.
知道为什么吗?
我有一个带Map<Integer, Set<Object>>参数的方法.我需要使用a Map<Integer, Set<String>>和a Map<Integer, Set<Integer>>参数从两个不同的位置调用它.
编译器投诉所以我改变了方法参数签名Map<Integer, ?>,现在我可以调用它,但是有不同的问题.方法基本如下:
private void methodA (Map<Integer, ?> inOutMap, Integer key, Object value) {
Set<Object> list = new HashSet<Object>();
if (!inOutMap.containsKey(key)) {
list.add(value);
} else {
list = (Set<Object>) (Set<?>) inOutMap.get(key); //I wrote the cast, but looks quite ugly
list.add(value);
}
inOutMap.put(key, list); //compiler error
//The method put(Integer, capture#4-of ?) in the type Map<Integer,capture#4-of ?> is not applicable for the arguments (Integer, Set<Object>)
}
Run Code Online (Sandbox Code Playgroud)
有没有办法解决编译错误?这是,铸造list到?. …
我有一些这种结构的代码:
public void method() {
Object o;
try {
o = new Object();
} catch (Exception e) {
//Processing, several lines
throw new Error(); //Our own unchecked exception
}
doSomething(o);
}
Run Code Online (Sandbox Code Playgroud)
我有很多方法,我在catch块中有相同的代码,所以我想将它提取到一个方法,以便我可以保存一些行.我的问题是,如果我这样做,我得到编译器错误"局部变量o可能没有被初始化".
public void method() {
Object o;
try {
o = new Object();
} catch (Exception e) {
handleError();
}
//doSomething(o); compiler error
}
private void handleError() throws Error {
//Processing, several lines
throw new Error();
}
Run Code Online (Sandbox Code Playgroud)
有没有解决方法?
有没有办法将枚举转换为常量表达式?我希望我的switch操作符在枚举的值中进行选择,但是我得到了一个编译错误"case表达式必须是常量表达式",所以我试着在变量中声明它:
final int REG = MyEnum.REG.getIndex().intValue();
switch (service.getIndex()) {
case REG:
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误.根据Oracle的文档http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28
编译时常量表达式是表示基本类型的值的表达式或不突然完成的字符串,仅使用以下内容组成:
•原始类型的文字和String类型的文字
所以它没有用,因为我没有使用文字.我想我必须声明为:
final int REG = 8;
Run Code Online (Sandbox Code Playgroud)
但是把它与枚举联系起来要好得多.有没有办法做到这一点?
编辑
结果我不需要使用任何最终变量.这很简单:
switch (service) {
case REG:
Run Code Online (Sandbox Code Playgroud)
在我看到安德里亚的评论之前,我没有想到这一点.谢谢你的回答.
我有以下方法使用泛型执行它收到的列表中每个项的getter:
public static <T, S> List<S> getValues(List<T> list, String fieldName) {
List<S> ret = new ArrayList<S>();
String methodName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
try {
if (list != null && !list.isEmpty()) {
for (T t : list) {
ret.add((S) t.getClass().getMethod(methodName).invoke(t));
}
}
} catch (IllegalArgumentException e) {
} catch (SecurityException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
} catch (NoSuchMethodException e) {
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
如果我这样称它,它的工作原理非常好:
List<Integer> ids = getValues(List<MyDTO>, "id"); …Run Code Online (Sandbox Code Playgroud) 我需要你们专家的一些了解
本程序不会阻止阻塞(因为Heap已满,但我想了解原因)
public class OOME_NotCatch {
static List l = new ArrayList();
static Long i = new Long(1);
public static void main(String[] args) {
try {
while (true) {
l.add(i);
i++;
}
} catch (OutOfMemoryError e) {
e.printStackTrace();
System.out.println("Encountered OutOfMemoryError");
}
}
}
//Console : Exception in thread "main"
Run Code Online (Sandbox Code Playgroud)
但即使在获得OOME之后,下面的程序运行良好:
public class Catch_OOME_Collection {
static List l = new ArrayList();
public static void main(String[] args) {
try {
while (true) {
l.add(new byte[1000000]);
System.out.println("size " + l.size());
}
} catch …Run Code Online (Sandbox Code Playgroud) 此答案建议使用大于/小于查询匹配给定日期的日期.但是我公司的一位老兵告诉我要用LIKE '2014-02-06%'.
什么是最佳做法?一个比另一个有什么显着优势吗?
我知道在编写文本时应该使用编写器而不是输出流,但我仍然不明白为什么outputStream.txt在运行此程序后文件中有额外的字符:
public static void main(String[] args) throws FileNotFoundException, IOException
{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("C:\\Data\\tmp\\outputStream.txt")));
oos.writeObject("SomeObject");
oos.writeUTF("SomeUTF");
oos.flush();
oos.close();
BufferedWriter writer = new BufferedWriter(new FileWriter(new File("C:\\Data\\tmp\\outputWriter.txt")));
writer.write("SomeObject");
writer.write("SomeUTF");
writer.flush();
writer.close();
}
Run Code Online (Sandbox Code Playgroud)
outputWriter.txt正如预期的那样,该文件是17字节,但是outputStream.txt是28,包括一些无法识别的文本.这是为什么?
根据我所读到的,我认为这不可能,但我想确定.我有一个班级OpDTO和其他几个*DTO extends OpDTO.然后,我想要一个方法从这些子DTO的列表中提取某些元素,并将提取的元素返回到另一个列表中:
public List<? extends OpDTO> getLastOp (List<? extends OpDTO> listDTOs) {
List<? extends OpDTO> last = new ArrayList<? extends OpDTO>(); //compile error: Cannot instantiate the type ArrayList<? extends OpDTO>
//processing
return last;
}
Run Code Online (Sandbox Code Playgroud)
我希望ult成为与元素相同类型的元素列表listDTOs,并且只使用OpDTO的方法,但它会产生编译错误:
无法实例化该类型
ArrayList<? extends OpDTO>
我也尝试过这样的事情:
public <T> List<T> getLastOp (List<T> listDTOs) {
List<T> last = new ArrayList<T>();
//processing
return last;
}
Run Code Online (Sandbox Code Playgroud)
但是后来我不能强制listDTOs中的元素成为OpDTO的子类,并且无法实例化T.任何想法?
编辑
我也发生了将类型作为参数传递,然后我可以实例化它.这样可以,还是某种不好的做法?
private <T extends OpDTO> List<T> getLastOp (List<T> listDTOs, Class<? extends OpDTO> clazz) …Run Code Online (Sandbox Code Playgroud)