1

なぜそのような結果が得られたのかを理解しようとしていました (これは私が期待した理由ではありません)」

public interface ICommandAble
{ }

public interface ILogAble extends ICommandAble
{ }

public interface IMonitorAble extends ICommandAble
{ }

public abstract class ClassAbs
{ }

public class A extends ClassAbs implements IMonitorAble, ILogAble
{ }

試験方法:

public void test()
{
   A a=new A();
   List<ICommandAble>commandList=new ArrayList<ICommandAble>()
   if (a instanceof ILogAble)
   {
       ILogAble logAbleItem=(ILogAble)a;
       commandList.add(logAbleItem);
   }
   if (a instanceof IMonitorAble) {
       IMonitorAble monitorAbleItem=(IMonitorAble)a;
       commandList.add(monitorAbleItem);
   }
   for(ICommandAble item: commandList)
   {
        if(item instanceof IMonitorAble)
        {
          log.debug("is monitorable");
        }
        if(item instanceof ILogAble)
        {
          log.debug("is logable");
        }
}

出力は次のとおりです。

2013-04-22 18:25:00,498 コム... [デバッグ] は監視可能です

2013-04-22 18:25:02,150 com.... [DEBUG] はログ可能です

2013-04-22 18:25:08,322 com.... [DEBUG] は監視可能です

2013-04-22 18:25:08,977 com.... [DEBUG] は記録可能です

私は見ることを期待していました:.

2013-04-22 18:25:00,498 コム... [デバッグ] は監視可能です

2013-04-22 18:25:02,150 com.... [DEBUG] はログ可能です

ここで何が欠けていますか?

私は今、私がここで見逃していることを理解しています。しかし、これを 2 番目のインスタンスで 1 回だけ入力するように再設計するにはどうすればよいでしょうか? 私の意図はこれを見ることでした:

2013-04-22 18:25:00,498 com... [DEBUG] is monitorable

2013-04-22 18:25:02,150 com.... [DEBUG] is logable

これを再設計するための推奨事項はありますか?

そうしないと、すべてを 2 回実行することになりますが、私の意図は、それぞれを 1 回だけ実行することでした。

ありがとう、レイ。

4

2 に答える 2