Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Understanding Subtype in 5 Minutes

Understanding Subtype in 5 Minutes

Ryosuke TAKASHIMA

September 06, 2019
Tweet

More Decks by Ryosuke TAKASHIMA

Other Decks in Programming

Transcript

  1. ෦෼ܕؔ܎̎ w ԼҐͷܕ͕ظ଴͞Ε͍ͯΔͱ͜Ζʹɺ্ҐͷܕΛ࢖͏͜ͱ͸Ͱ͖ͳ͍ Function<Integer, String> intFunc = i -> Integer.toString(i

    / 2) + "???"; intFunc.apply(76); // => "39???" intFunc.apply(new Object()); // => Compile Error
  2. ؔ਺ͷ৔߹̍ w ؔ਺΋ܕ Function<Function<Number, String>, String> numFuncFunc = f ->

    f.apply(76.0); Function<Number, String> numFunc = n -> Integer.toString(n.intValue() / 4) + "..."; numFuncFunc.apply(numFunc); // => "19..."
  3. ؔ਺ͷ৔߹̎ w Ҿ਺Ͱ౉ؔ͢਺ͷҾ਺͸ɺԼҐͷܕʹͰ͖ͳ͍ʂ
 ౉ؔ͢਺͸ɺҾ਺ͷܕʹ࿙Εͳ͘ରԠͰ͖Δʢ૝ఆ֎Ͱͳ͍ʣඞཁ͕͋Δ Function<Function<Number, String>, String> numFuncFunc = f

    -> f.apply(76.0); Function<Integer, String> intFunc = i -> Integer.toString(i * 2) + "???"; numFuncFunc.apply(intFunc); // => CompileError
  4. ؔ਺ͷ৔߹̏ w ٯʹ্ҐͷܕΛҾ਺ʹͱΔؔ਺ͳΒɾɾɾ Function<Function<? super Number, String>, String> numFuncFunc =

    f -> f.apply(76.0); Function<Object, String> objFunc = o -> o.toString() + "!!!"; numFuncFunc.apply(objFunc); // => "76.0!!!"