0

私はインターフェースを持っています

public interface Doable<T,U> {
    public U doStuff(T t);
}

実装する抽象クラスがありますDoable<T,U>

public abstract class AbstractDoable<T,U> implements Doable<T, U> {
    private SomeClass someClass;

}

上記のクラスを実装する必要がありますが、 と には異なるクラスを使用する必要がTありUます。

AbstractDoable異なるTとの複数の実装が必要になるため、これをどのように進めるべきかを提案してくださいU。例えば:

ConvertDoable<String,Integer> extends AbstractDoable

また

ConvertDoable<A,B> extends AbstractDoable
4

5 に答える 5

2

Doableまたはの任意のサブクラスを作成できますAbstractDoable。例えば:

public class DoNothing implements Doable<String, String> {
    public String doStuff(String input) {
        return input;
    }
}

また

public class DoSomething extends AbstractDoable<Integer, String> {
    public String doStuff(Integer i) {
        return i.toString();
    }
}

あなたのsomeClassメンバーの目的がAbstractDoable. それが何のためにあるのか説明できますか?

于 2011-06-28T06:06:24.217 に答える
1

具体的な実装では、次のいずれかのタイプを指定する必要がありますAbstractDoable

public class ConvertDoable extends AbstractDoable<String,Integer>
{
    public Integer doStuff(String arg){...}
}

または、パラメーター化されたジェネリックを引き続き渡します。

public class ConvertDoable<T,U> extends AbstractDoable<T,U>
{
    public U doStuff(T arg){...}
}
于 2011-06-28T06:06:51.830 に答える
1

クラスの肥大化が心配な場合は、匿名クラス (必要に応じて「その場で」定義されるクラス) を検討してください。

public static void main(String[] args) {
    Doable<String, Integer> myDoable = new AbstractDoable<String, Integer>() {
        public Integer doStuff(String t) {
           return new Integer(t); // for example
        }
    }

    Integer i = myDoable.doStuff("0");
}
于 2011-06-28T06:05:37.473 に答える
1
interface Doable<T,U> {
    public U doStuff(T t);
}

abstract class AbstractDoable<T,U> implements Doable<T, U> {
}

class ConvertDoableStringInteger extends AbstractDoable<String, Integer>{
    public Integer doStuff(String t) {
        return null;
    }   
}

class ConvertDoableIntergerFloat extends AbstractDoable<Integer, Float> {
    public Float doStuff(Integer t) {
        return 0.0f;
    }   
}
于 2011-06-28T06:10:06.670 に答える
0

ジェネリックについての全体的な考え方は、すべてのタイプのクラス (または少なくともクラスから継承するか、インターフェイスを実装するすべてのクラス) をサポートする単一のクラスを作成することです。

また、Java(バイトコード)では、言う間に違いはありません

GenericClass<A,B> foo;

GenericClass<C,D> bar;

したがって、与えられる可能性のあるさまざまなオブジェクトをすべて処理できる単一のクラスを定義する必要があります。

于 2011-06-28T06:06:32.823 に答える