package org.example;
import java.security.PublicKey;
interface Printable{
public void print();
}
class Papers{
private String con;
public Papers(String s) { // 생성자
con = s;
}
public Printable getPrinter(){
return new Printer();
}
private class Printer implements Printable{
@Override
public void print() {
System.out.println(con);
}
}
}
public class Main3 {
public static void main(String[] args) {
Papers p = new Papers("서류입니다.");
Printable prn = p.getPrinter();
prn.print();
}
}
멤버 클래스는 클래스의 정의를 감추어야 할때 유용하게 사용된다.
package org.example;
import java.security.PublicKey;
import java.util.ArrayList;
interface Printable{
public void print();
}
class Papers{
private String con;
public Papers(String con) { // 생성자
this.con = con;
}
public Printable getPrinter(){ // 로컬 클래스
class Printer implements Printable{
@Override
public void print() {
System.out.println(con);
}
}
return new Printer();
}
public Printable getPrinter1() { // 익명 객체
return new Printable() {
@Override
public void print() {
System.out.println(con);
}
};
}
public Printable getPrinter2() { // 람다식
return () ->{
System.out.println(con);
};
}
}
public class Main3 {
public static void main(String[] args) {
Papers p = new Papers("서류입니다.");
Printable prn = p.getPrinter();
Printable prn1 = p.getPrinter1();
Printable prn2 = p.getPrinter2();
prn.print();
prn1.print();
prn2.print();
}
}
가면 갈수록 간단 해진다.
● 익명 클래스
package org.example;
import java.util.*;
class StrComp implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
// return o2.length() - o1.length(); 내림차순
return o1.length() - o2.length(); // 오름차순
}
}
public class Main4 {
public static void main(String[] args) {
List<String> list2 = Arrays.asList("d","aa","sda","dswr","asder");
list2 = new ArrayList<>(list2);
List<String> list = new ArrayList<>();
list.add("a");
list.add("aa");
list.add("aaa");
// 정렬
Collections.sort(list,new StrComp());
StrComp strComp = new StrComp();
// Collections.sort(list,strComp);
Collections.sort(list2,strComp);
//출력 해준다
System.out.println(list);
System.out.println(list2);
}
}
package org.example;
import java.util.*;
class StrComp implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
// return o2.length() - o1.length(); 내림차순
return o1.length() - o2.length(); // 오름차순
}
}
public class Main4 {
public static void main(String[] args) {
List<String> list2 = Arrays.asList("d","aa","sda","dswr","asder");
list2 = new ArrayList<>(list2);
List<String> list = new ArrayList<>();
list.add("a");
list.add("aa");
list.add("aaa");
// // 정렬
// Collections.sort(list,new StrComp());
// StrComp strComp = new StrComp();
//// Collections.sort(list,strComp);
// Collections.sort(list2,strComp);
//출력 해준다
Comparator<String> comp = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
};
Collections.sort(list,comp);
Collections.sort(list,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
// Collections.sort(list,(o1, o2) -> {return o1.length() - o2.length();});
Collections.sort(list,(o1, o2) -> o1.length() - o2.length());
System.out.println(list);
System.out.println(list2);
}
}
람다식으로도 표현 가능하다
'java' 카테고리의 다른 글
람다와 함수형 인터페이스 (1) | 2024.02.08 |
---|---|
람다의 방식 (0) | 2024.02.07 |
네스티스(중첩) 클래스 (0) | 2024.02.07 |
어노테이션 사용문법 (0) | 2024.02.06 |
가변인자 선언에 대한 컴파일 처리 (0) | 2024.02.06 |