4

削除したい単一の抽象メソッドを持つ抽象基本クラスがあります。そのメソッドを使用して新しいインターフェイスを導入し、基本クラスを拡張するのではなく、既存のすべてのサブクラスを作成してそのインターフェイスを実装したいと思います。

から:

public abstract class Base {
  public abstract Foo getFoo();
}

public class Concrete extends Base {
  public Foo getFoo() {
    throw new UnsupportedOperationException();
  }
}

に:

public interface Base {
  Foo getFoo();
}

public class Concrete implements Base {
  public Foo getFoo() {
    throw new UnsupportedOperationException();
  }
}

基本クラスをインライン化しようとして成功しませんでした。インターフェイスを手動で作成し、メンバーをプルしてから空の基本クラスを削除しましたが、IntelliJにこの操作を自動的に完了させることができないようです。

これを解決する方法について何か提案はありますか?

4

2 に答える 2

2

これが IDEA の問題であると思い込ませることができたことに今気づきました。むしろ、かなりの数のジェネリック参照で使用されているインライン化しようとした抽象型に関連しています。

final MyMapping<Base, String>  = (...)

IDEA は、これらすべての一般的な参照で何をしたいのかを推測できません。これらは手動で解決する必要があり、それとは別に、以下が機能します。私はから始めます:

public abstract class AbstractSomething {
    public abstract void foo();
}

public class ConcreteSomething extends AbstractSomething {
    @Override
    public void foo() {
        throw new UnsupportedOperationException();
    }
}

次に、次のように追加します。

public abstract class AbstractSomething implements Something {..}

そのインターフェイスを追加することを選択する何かでalt-enter。次に、リファクタリング -> メンバーをプルアップし、abstract メソッドを Something インターフェイスに移動することを確認します。結果は次のようになります。

public interface Something {
    void foo();
}
public abstract class AbstractSomething implements Something {
}

ConcreteSomething の AbstractSomething でカーソルが点滅している状態で、ctrl+alt+n でインライン スーパークラスに移動します。AbstractSomething はなくなってしまい、私は残っています

public class ConcreteSomething implements Something {
    @Override
    public void foo() {
        throw new UnsupportedOperationException();
    }
}

この IDE を気に入っていただけると幸いです。常に私よりもスマートです。

于 2013-02-19T13:17:39.467 に答える