Java 我们可以编写自定义标记接口吗
我想编写自己的标记接口,如Java 我们可以编写自定义标记接口吗,java,Java,我想编写自己的标记接口,如java.io.Serializable或Cloneable,这对JVM来说是可以理解的。请告诉我实施程序 例如,我实现了一个名为NotInheritable的接口,所有实现该接口的类都必须避免继承 public interface MyMarkerInterface {} public class MyMarkedClass implements MyMarkerInterface {} 例如,您可以让方法仅取MyMarkerInterface实例: public
java.io.Serializable
或Cloneable
,这对JVM来说是可以理解的。请告诉我实施程序
例如,我实现了一个名为NotInheritable
的接口,所有实现该接口的类都必须避免继承
public interface MyMarkerInterface {}
public class MyMarkedClass implements MyMarkerInterface {}
例如,您可以让方法仅取MyMarkerInterface
实例:
public myMethod(MyMarkerInterface x) {}
或者在运行时使用
instanceof
进行检查 标记接口是空接口。这意味着您只需要创建一个接口,而不需要在其中创建任何方法。你会找到更好的解释
这种方法可以替换为在类型上具有类似功能的方法 您可以编写自己的标记接口,JVM对此一无所知
您必须使用
instanceof
提供功能 假设只有在标记MyInterface时才调用myMethod
interface MyInterface{}
class MyException extends RuntimeException{
public MyException(){}
public MyException(String message){
super(message);
}
}
class MyClass implements MyInterface{
public void myMethod(){
if(!(this instanceOf MyInterface)){
throw new MyException();
}else{
// DO YOUR WORK
}
}
}
是的,我们可以编写我们自己的标记异常。。。。请参阅下面的示例
interface Marker{
}
class MyException extends Exception {
public MyException(String s){
super(s);
}
}
class A implements Marker {
void m1() throws MyException{
if((this instanceof Marker)){
System.out.println("successfull");
}
else {
throw new MyException("Unsuccessful class must implement interface Marker ");
}
}
}
/* Class B has not implemented Maker interface .
* will not work & print unsuccessful Must implement interface Marker
*/
class B extends A {
}
// Class C has not implemented Maker interface . Will work & print successful
public class C extends A implements Marker
{ // if this class will not implement Marker, throw exception
public static void main(String[] args) {
C a= new C();
B b = new B();
try {
a.m1(); // Calling m1() and will print
b.m1();
} catch (MyException e) {
System.out.println(e);
}
}
}
JVM理解的
是什么意思?不,但JVM支持将类标记为“不可继承”。答案是否,如果要创建任何标记“重要接口”,则不能创建。但若您想创建标记接口只是为了检查类对象是否是该标记接口的对象,那个么可以。要创建“对JVM来说可以理解”的标记接口,JVM需要定制,我不确定是否可以做到。maker仍然有其自身的重要性。这个例子似乎完全没有意义。为什么不让Aa类实现marker接口呢?