JVM が理解できる、java.io.Serializable
またはのような独自のマーカー インターフェイスを作成したいと考えています。Cloneable
実装手順を教えてください。
たとえば、というインターフェイスを実装しましたNotInheritable
が、このインターフェイスを実装するすべてのクラスは継承を回避する必要があります。
JVM が理解できる、java.io.Serializable
またはのような独自のマーカー インターフェイスを作成したいと考えています。Cloneable
実装手順を教えてください。
たとえば、というインターフェイスを実装しましたNotInheritable
が、このインターフェイスを実装するすべてのクラスは継承を回避する必要があります。
public interface MyMarkerInterface {}
public class MyMarkedClass implements MyMarkerInterface {}
MyMarkerInterface
次に、たとえば、インスタンスのみを取得するメソッドを作成できます。
public myMethod(MyMarkerInterface x) {}
またはinstanceof
実行時に確認してください。
はい、独自のマーカー例外を作成できます....次の例を参照してください....
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);
}
}
}
マーカー 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
}
}
}