2

この他の回答からコードを借りました

interface IConverter<TFrom, TTo>
{
    TTo convert(TFrom from);
}

class IntToStringConverter implements IConverter<Integer, String>
{
    public String convert(Integer from)
    {
        return "This is a string: " + from.toString();
    }
}

class ConverterUser<TConverter extends IConverter<TFrom, TTo>, TFrom, TTo>
{
    public ConverterUser()
    {
    }

    private List<TConverter> _converter2;

    private TConverter _converter;

    public void replaceConverter(TConverter converter)
    {
        _converter = converter;
    }

    public TTo convert(TFrom from)
    {
        return _converter.convert(from);
    }
}

class Test
{
    public static void main(String[] args)
    {
        ConverterUser<IntToStringConverter, Integer, String> converterUser =
            new ConverterUser<IntToStringConverter, Integer, String>();

        converterUser.replaceConverter(new IntToStringConverter());

        System.out.println(converterUser.convert(328));
    }
}

私の質問は、このコードに関係しています

    ConverterUser<IntToStringConverter, Integer, String> converterUser =
        new ConverterUser<IntToStringConverter, Integer, String>();

IntToStringConverterを実装しているようIConverter<Integer, String>Integer、タイプは既知ですが、Java にはタイプ入力を回避してタイプするだけStringの推論システムがありませんか?new ConverterUser<IntToStringConverter, Integer, String>()new ConverterUser<IntToStringConverter>()

4

1 に答える 1

2

いいえ。

ConverterUserクラス定義では、型パラメーターTFromと型パラメーターをどこかTToに導入する必要があるため、型定義で使用されます。TConverter extends IConverter<TFrom, TTo>

ConverterUserこれが、結果が 3 つの型パラメーターである理由です。

2 番目と 3 番目の型パラメーターを削除できることに注意してくださいIntToStringConverterConverterUserただし、この方法では、クラスが から にのみ変換される運命にあるため、そうすることはお勧めしません。IntegerString

class ConverterUser<TConverter extends IntToStringConverter> {
    public ConverterUser() { ... }

    private TConverter _converter;

    public String convert(Integer from)
    {
        return _converter.convert(from);
    }
}
于 2015-01-28T15:13:32.097 に答える