我有一个小系统,我想提供一个可以分析错误/异常并提出可能的解决方案的产品.
所以我想要一种解析java Exception的方法(因为我只在日志中使用它们[我不想影响实际的系统]).
解析之后,我想将它保存在数据库中,并将其与以前保存的异常(以某种格式)进行比较,以便找到最接近的匹配异常.
我想到了以下想法:"在D处C处的A处的XException"将保存为[XException,A,B,C,D],我将以某种方式在我的DB中搜索:[XException,?,?, ?]哪个最接近.例如:[XException,A,G,C,D]非常好.
您如何看待这些想法?
任何有效的方法来解析异常?
有效或更好的方法来定义两个例外之间的距离?
知道任何可以做到这一点的开源 - 我觉得没有找到任何.
谢谢.
Class<? extends Integer>将编译正常,但是Integer是最终类型,因此将它用作上限是没有意义的(没有任何东西会永远extend).
如果您尝试使用final类型作为类型参数的上限,您将收到编译器警告:
类型参数T不应受最终类型Integer的限制.最终类型无法进一步扩展
为什么使用final类型作为通配符的上限是完全正常的,但是为类型参数抛出警告?为什么Java甚至允许通配符被最终的上层类型限制?
假设我有以下内容:
public interface Filter<E> {
public boolean accept(E obj);
}
Run Code Online (Sandbox Code Playgroud)
和
import java.io.File;
import java.io.FilenameFilter;
public abstract class CombiningFileFilter extends javax.swing.filechooser.FileFilter
implements java.io.FileFilter, FilenameFilter {
@Override
public boolean accept(File dir, String name) {
return accept(new File(dir, name));
}
}
Run Code Online (Sandbox Code Playgroud)
就目前而言,您可以使用javac进行编译CombiningFileFilter.但是,如果你还决定实施Filter<File>中CombiningFileFilter,你会得到以下错误:
CombiningFileFilter.java:9: error: reference to accept is ambiguous,
both method accept(File) in FileFilter and method accept(E) in Filter match
return accept(new File(dir, name));
^
where E is a type-variable:
E extends Object declared in interface …Run Code Online (Sandbox Code Playgroud) 我有一个功能接口,它将标准的jdk函数扩展为泛型类型.现在我想使用andThen组合两个函数,这会抛出编译器错误
错误:(25,25)java:方法然后在接口
java.util.function.Function<T,R>中不能应用于给定的类型;
required:java.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>found:ui.instrumentation.api.transformation.Transformer<T,R>reason:无法推断类型变量(s)V(参数不匹配;ui.instrumentation.api.transformation.Transformer<T,R>无法转换为java.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>)
以下是示例代码:
public interface Transformer<T,R> extends Function<Message<T>, Message<R>> {
static <T, R> Transformer<T, R> combine2(Transformer<T, R> first, Transformer<T, R> second) {
return first.andThen(second));
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法组合扩展标准功能接口的功能或有更好的方法来做到这一点?
我有这个基本程序,除了坐在那里等待输入之外什么都不做:
import java.io.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Basic {
public static void main(String[] args) throws Exception{
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
input=br.readLine();
}catch(IOException io){
io.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个:
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15001 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false Basic
Run Code Online (Sandbox Code Playgroud)
我通过JConsole连接看到这个:

这只是因为核心java bytcode最初被编译?当进程没有做任何事情时,如何增加codecache?
当我有这个版本(使用Thread.sleep):
public class Basic {
public static void main(String[] args) throws Exception{
while(true) {
Thread.sleep(5000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我明白了:

那么......为什么会这样呢?
PS这是输出java -version:
java version "1.6.0_37"
Java(TM) SE Runtime Environment …Run Code Online (Sandbox Code Playgroud) 有一些类,例如Closeable,File和Container,在晦涩的包中有doppelgänger类,我极不可能使用.通常情况下,这不是问题,但是当我组织进口时,我必须手动选择要导入的正确类型.有没有办法从Organize Imports工具中排除特定的包?

Eclipse Version:
版本:3.7.1
Build id:M20110909-1335
public class A{
A a;
public static void main(String args[]){
A b = new A();//new object created, obj1
b.a = new A();//new object created, obj2
b = null;
//line 8
}
}
Run Code Online (Sandbox Code Playgroud)
当达到第8行时,obj1符合GC的条件.obj2也有资格获得GC吗?
这有什么问题;
public class cast {
public static void main(String args[]){
double x, y;
int i;
char c;
x = 10.0;
y = 3.0;
i = (int) (x / y);
System.out.println("Integer outcome of x / y = " + i);
i = 100; //Assaigning new value to i.
b = (byte) i;
System.out.println("The value of i is: " + b);
}
}
Run Code Online (Sandbox Code Playgroud)
它给我以下错误信息; b无法解析为变量.
虽然我完全按照他们在书中所做的那样做(我想,重读这本书的指令就像五次......)
我正在浏览一些接口,我想知道为什么这不起作用:
interface I {
public void doSomething(String x);
}
class MyType implements I {
public int doSomething(String x) {
System.out.println(x);
return(0);
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,为什么我不能在界面中实现该方法?有一个返回类型有不同的签名吗?是不是名称,参数和返回类型使方法独特?
嗨,我有一个类属性和2子类商店和公寓.
在另一个班级,我有一个商店和公寓混合的arraylist.我有代码:
for(Property prop: properties){
if(prop.getClass().equals(Shop.class))
prop.setShopDetails(detail);
else
prop.setAppDetails(detail)
}
Run Code Online (Sandbox Code Playgroud)
如何在商店类中访问方法setShopDetails()?
我正在研究java字节码,当我注意到简单表达式Math.max(0,1)变成了下面的字节码指令.
ICONST_0,
ICONST_1,
INVOKESTATIC(java/lang/Math.max)
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果java使用后进先出堆栈,这意味着1现在将位于堆栈上的0前面,这意味着vm必须在它调用最大值时反转堆栈中项目的顺序指令在1之前得到0但是在规范中,它说明了这一点,我的假设是正确的.
我有一个比较器,它检查是否有任何字符串为null并返回-1.如果它们不为null,则进行比较.我希望使用lambda函数实现它.
这是代码:
private SortedSet<Student> studentSet() {
return new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if(s1.getName() == null) {
return -1;
}
if(s2.getName() == null) {
return 1;
}
return s1.getName().compareToIgnoreCase(s2.getName());
}
});
}
Run Code Online (Sandbox Code Playgroud)
我知道如何使用lambdas返回一个简单的比较器.我对如何实现上面的代码很困惑.