这个主题已经有问题和答案,没有一个具有决定性的结果。如果这是不可能的,那么有人可以确定最佳解决方法吗? 一些答案说这可以用Java 8实现,但是我的IDE(eclipse)仍然显示错误,即使它被设置为编译器合规性1.8。如果有人可以让它在他们的系统上工作,请告诉我,我将解决我的系统问题。
问题:我需要创建一个包含静态和非静态方法的接口。一个例子:
// I need to create an interface with both static and non-static methods.
public interface TestInterface {
// No problem
int objectMethod();
// static is an illegal modifier in an interface
static int classMethod();
}
// TestClass is one of many classes that will implement the interface.
public class TestClass implements TestInterface {
// static and non-static variables are no problem
private int objectVal;
public static int classVal;
// this method has no problem
public int objectMethod() {
return objectVal;
}
// this one has problems because it implements a method that has problems
public static int classMethod() {
return classVal;
}
}
我需要一个使用实现接口
的类的类// a class that will use classes that implement from the interface
// what is the syntax for this? my IDE doesnt like the implements keyword
public class TestGeneric <T implements TestInterface> {
// stored instances of the class
private T t;
public void foo() {
System.out.printf("t's value is: %d\n", t.objectMethod());
System.out.printf("T's value is: %d\n", T.classMethod());
}
}
上面代码中的唯一问题是静态方法。我能想到的唯一解决方法是不将任何方法声明为静态,而是以与静态使用最相似的方式使用它们。
答案 0 :(得分:-1)
你最接近你所要求的是:
public interface TestInterface {
int objectMethod();
int classMethod(); // Note: not static
}
public class TestClass implements TestInterface {
private int objectVal;
public static int classVal;
public int objectMethod() { return objectVal; }
public int classMethod() { return classVal; }
}
public class TestGeneric <T extends TestInterface> {
private T t;
public void foo() {
System.out.printf("t's value is: %d\n", t.objectMethod());
System.out.printf("T's value is: %d\n", t.classMethod());
}
}
这里,classMethod()
不是静态的,但是该方法访问类静态成员,为您提供所需的行为。