public class Pair<T extends Comparable<T>> {
private T first;
private T second;
public Pair(T first, T second) {
this.first = first;
this.second = second;
}
public T getFirst() {
return first;
}
public T getSecond() {
return second;
}
public T getMax() {
return (first.compareTo(second) > 0) ? first : second;
}
public static void main(String[] args) {
// æ•´æ•°åž‹ã®ãƒšã‚¢
Pair<Integer> intPair = new Pair<>(3, 7);
System.out.println("Max of Integers: " + intPair.getMax());
// ダブル型ã®ãƒšã‚¢
Pair<Double> doublePair = new Pair<>(5.6, 2.3);
System.out.println("Max of Doubles: " + doublePair.getMax());
// æ–‡å—列型ã®ãƒšã‚¢
Pair<String> stringPair = new Pair<>("apple", "orange");
System.out.println("Max of Strings: " + stringPair.getMax());
}
}
ã“ã®ä¾‹ã§ã¯ã€Pair クラスãŒã‚¸ã‚§ãƒãƒªã‚¯ã‚¹ã§ã‚りã€T 㯠Comparable インターフェースを実装ã™ã‚‹åž‹ã«åˆ¶ç´„ã•れã¦ã„ã¾ã™ã€‚getMax メソッドã¯ã€first 㨠second ã®è¦ç´ を比較ã—ã€å¤§ãã„æ–¹ã‚’è¿”ã—ã¾ã™ã€‚main メソッドã§ã¯ã€æ•´æ•°åž‹ã€ãƒ€ãƒ–ãƒ«åž‹ã€æ–‡å—列型ã®ãƒšã‚¢ã‚’作æˆã—ã€ãれãžã‚Œã®æœ€å¤§å€¤ã‚’å–å¾—ã—ã¦ã„ã¾ã™ã€‚
ジェãƒãƒªã‚¯ã‚¹ã®åˆ¶ç´„
ジェãƒãƒªã‚¯ã‚¹ã®åˆ¶ç´„(Bounds)ã¯ã€ã‚¸ã‚§ãƒãƒªã‚¯ã‚¹ã‚’使用ã™ã‚‹éš›ã«åž‹ã«å¯¾ã™ã‚‹æ¡ä»¶ã‚’指定ã™ã‚‹ä»•組ã¿ã§ã™ã€‚主ã«2ã¤ã®åˆ¶ç´„ãŒã‚りã¾ã™ã€‚
- 上é™å¢ƒç•Œï¼ˆUpper Bounded):
- ジェãƒãƒªã‚¯ã‚¹åž‹ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãŒæŒ‡å®šã—ãŸåž‹ã¾ãŸã¯ãã®ã‚µãƒ–タイプã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
- 上é™å¢ƒç•Œã¯
extendsã‚ーワードを使用ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚ - 例:
class Box<T extends Number> { /* ... */ }
- 下é™å¢ƒç•Œï¼ˆLower Bounded):
- ジェãƒãƒªã‚¯ã‚¹åž‹ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãŒæŒ‡å®šã—ãŸåž‹ã¾ãŸã¯ãã®ã‚¹ãƒ¼ãƒ‘ータイプã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
- 下é™å¢ƒç•Œã¯
superã‚ーワードを使用ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚ - 例:
class Container<T super Integer> { /* ... */ }
上é™å¢ƒç•Œã®ä¾‹:
class Box<T extends Number> {
private T value;
public Box(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
ã“ã®ä¾‹ã§ã¯ã€Box クラスã®åž‹ãƒ‘ラメータ T 㯠Number クラスã¾ãŸã¯ãã®ã‚µãƒ–クラスã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚例ãˆã°ã€Box<Integer> ã‚„ Box<Double> ã¯æœ‰åйã§ã™ãŒã€Box<String> ã¯ç„¡åйã§ã™ã€‚
下é™å¢ƒç•Œã®ä¾‹:
class Container<T super Integer> {
private T value;
public Container(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
ã“ã®ä¾‹ã§ã¯ã€Container クラスã®åž‹ãƒ‘ラメータ T 㯠Integer クラスã¾ãŸã¯ãã®ã‚¹ãƒ¼ãƒ‘ークラスã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚例ãˆã°ã€Container<Number> ã‚„ Container<Object> ã¯æœ‰åйã§ã™ãŒã€Container<String> ã¯ç„¡åйã§ã™ã€‚
ジェãƒãƒªã‚¯ã‚¹ã®åˆ¶ç´„ã¯ã€åž‹å®‰å…¨æ€§ã‚’ä¿ã¡ã¤ã¤æŸ”軟性をæŒãŸã›ã‚‹ãŸã‚ã®é‡è¦ãªæ¦‚念ã§ã™ã€‚上é™å¢ƒç•Œã‚„下é™å¢ƒç•Œã‚’利用ã™ã‚‹ã“ã¨ã§ã€ã‚¸ã‚§ãƒãƒªã‚¯ã‚¹ã‚’使用ã™ã‚‹éš›ã«ç‰¹å®šã®åž‹ã®ã¿ã‚’å—ã‘入れãŸã‚Šã€ç‰¹å®šã®åž‹ã®ã‚µãƒ–タイプを制é™ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ—ãƒã‚°ãƒ©ãƒ ãŒã‚ˆã‚Šäºˆæ¸¬å¯èƒ½ã§ã€åž‹ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼ãŒã‚³ãƒ³ãƒ‘ã‚¤ãƒ«æ™‚ã«æ¤œçŸ¥ã•れやã™ããªã‚Šã¾ã™ã€‚
ジェãƒãƒªã‚¯ã‚¹ã®åˆ¶ç´„ã‚’é©åˆ‡ã«åˆ©ç”¨ã™ã‚‹ã“ã¨ã§ã€æŸ”軟性ã¨åž‹å®‰å…¨æ€§ã®ãƒãƒ©ãƒ³ã‚¹ã‚’å–りãªãŒã‚‰ã€å†åˆ©ç”¨å¯èƒ½ã§æ‹¡å¼µæ€§ã®ã‚るコードを構築ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚åž‹ã«é–¢ã™ã‚‹åˆ¶ç´„ã¯ã€ã‚³ãƒ¼ãƒ‰ã®å“質ã¨ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹æ€§ã‚’å‘上ã•ã›ã€ãƒ—ãƒã‚°ãƒ©ãƒ ã®å …牢性を高ã‚る一助ã¨ãªã‚Šã¾ã™ã€‚
「018 オブジェクト指å‘ã®æ·±åŒ–ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント