는 Java 지원을 기본 매개 변수 값을?

일부 왔는지 Java 코드를 통해 해당 경식도 다음과 같은 구조:

public MyParameterizedFunction(String param1, int param2)
{
    this(param1, param2, false);
}

public MyParameterizedFunction(String param1, int param2, boolean param3)
{
    //use all three parameters here
}

내가 알고 있는 매개변수입니다 기본값입니다 c++에서 지정할 수 있습니다. 예를 들면 다음과 같습니다.

void MyParameterizedFunction(String param1, int param2, bool param3=false);

이 같은 구문을 높여줍니까 Java 지원? 이유는 이 두 단계 구문을 사용하는 것이 더 좋을 수도 있습니까?

질문에 대한 의견 (7)
해결책

아니, 얼마나 jave 핸들을 찾은 이 구조 (즉, 대신 과부하가 함께 기본 매개변수).

  • 대한 구성자를 [지켜보리니 유효인 jave: 프로그래밍 언어 Guide& # 39 의] [1] * 품목 1 팁 (고려해보십시오 정적임 팩터리의 방법 대신 구성자를) 가 점점 너무 복잡하다. 경우에 따라서는 다른 방법을 사용하거나 매개변수입니다 객체에는 바꾸는 데 도움이 될 수 있습니다. 이 경우 복잡한 진행되고 있는 만큼 어려운 상황이다. 사용 할 수 있는 명확한 비유하사 차별화합니다 순서가 아니라 매개변수입니다 수와 종류는.

[1]: https://en.wikipedia.org/wiki/Joshua_Bloch # 서지

해설 (7)

아니, 하지만 &lt 사용할 수 있습니다. (http://en.wikipedia.org/wiki/Builder_pattern&quot), a href = &quot >;;;;; a href = &quot &lt pattern&lt 구성기는 /a&gt 설명한 대로, 이 스택 오버플로입니다 answer&lt /a&gt &gt https://stackoverflow.com/questions/222214/managing-constructors-with-many-parameters-in-java-1-4/222295 # 222295";;).

빌더 패턴 오토메이티드 설명한 대로, 이 같은 코드를 작성할 수 있습니다 링크됨

Student s1 = new StudentBuilder().name("Eli").buildStudent();
Student s2 = new StudentBuilder()
                 .name("Spicoli")
                 .age(16)
                 .motto("Aloha, Mr Hand")
                 .buildStudent();

가질 수 있는 일부 필드용 기본값과 또는 그렇지 않을 경우에는 선택적입니다.

해설 (8)

여러 가지 방법으로 기본 매개변수입니다 시뮬레이션하려면 자바 가상 머신 (jvm) 에:

  • overloading.* 방법 1.

void foo (문자열이어야 정수 a, b) { //. }

void 푸 (문자열 a) { 푸 (a, 0); 여기서 0 은 b 의 기본값입니다 // }

푸 (&quot a&quot,, 2). 푸 (a&quot ";).

39 한 것이, 이 한계를 외곽진입 doesn& 경우 두 개의 선택적 매개 변수가 t 작동합니까 같은 유형 및 이들을 생략할 수 있습니다.

  • Varargs.* 1.

a) 같은 유형의 모든 옵션임 매개변수입니다.

void 푸 (문자열 a, 정수. b) { 정수 b1 = 발렌크스 &gt. 0? b [0]: 0; 정수 b2 = 발렌크스 &gt. 1? b [1]: 0; //. }

푸 (a&quot ";). 푸 (&quot a&quot,, 1, 2).

b) 가지유형의 옵션임 매개변수입니다 다를 수 있습니다.

void 푸 (문자열 a, 객체에는. b) { 정수 b1 = 0; 구체화하십시오 b2 = &quot ";; if (발렌크스 &gt. 0) { if (! (b [0] instanceof Integer) { 새로운 것을 이가라구멍렉세페시옹 (.&quot ";). } b1 = (정수) b [0]; } if (발렌크스 &gt. 1) { if (! (b [1] instanceof 구체화하십시오) { 새로운 것을 이가라구멍렉세페시옹 (.&quot ";). } b2 = (String) b [1]; //. } //. }

푸 (a&quot ";). 푸 (&quot a&quot,, 1). 푸 (,, 1, &quot &quot a&quot b2";).

이 경우 주요 단점이 외곽진입 에로남이네 선택적 매개 변수가 서로 다른 유형의 패배하셨습니다 정적 타입 검사. 또 다른 방법으로 구분할 수 있다면 다른 의미를 가지고 각 매개변수입니다 합니다.

    • Nulls.* 제한을 해결하기 위해 null 값이 이전 외곽진입 분석 후 각 매개변수입니다 메서드입니다 바디입니다 허용할 수 있습니다.

void 푸 (문자열 a, b, c 정수 (Integer) { b = b = null?! b: 0; c = c = null?! c: 0; //. }

푸 (,, &quot a&quot nulll, 2).

이제 모든 인수만 값을 수준들과 널일 수 있지만 기본적으로 제공해야 합니다.

  • 옵션임 class.* null 사용되지만, 이 방법은 1. 8 옵션임 자바 클래스를 매개변수입니다 비슷한 투명지에 기본값입니다:

void 푸 (문자열 a, Optional&lt Integer>; 보프트) { 정수 b = 보pt.리스프레센트 ()? 보pt.제 (): 0; //. }

푸 (,, &quot a&quot 오티오나라자로프 (2)); 푸 (,,, 정작 &quot a&quot Optional.&lt Integer&gt ());

그러나 한 가지 옵션 계약을 통해 메서드입니다 명시성 kingdome. seattle. 요청자에게 등 세부 서명입니다 너무, 볼 수도 있다.

이 패턴은 데사용됩니다 구성자를 및 의해 구현됩니다. 구성기는 1 pattern. 구성기는 소개합니까 별도의 구성기는 클래스:

클래스 Foo { 한 민간 최종 문자열이어야. 개인 최종 정수 b;

푸 (문자열이어야 정수 a, b) { 티스트라 = a; 티s.b = b; }

//. }

클래스 포브유더 { a = &quot 보면안돼 문자열이어야 ";; 개인 정수 b = 0;

포브유더 세타 (문자열 a) { 티스트라 = a; 이 반품하십시오. }

포브유더 세바 (정수 b) { 티s.b = b; 이 반품하십시오. }

Foo 구축하십시오 () { 새로운 반품하십시오 푸 (a, b). } }

Foo foo = new 포브유더 () (), 스베일드 오스타 (a&quot ";)

대부분의 경우 너무 크고 Maps. 매개 변수의 수를 1. 그들을 기본값과 일반적으로 사용되는 방법은 그들의 이름 / 값이 인수만 맵으로 전달할 수 있습니다.

void foo (Map&lt, 문자열, Object&gt. 매개변수) { A = &quot 문자열이어야 ";; 정수 b = 0; if (파라머터스.콘타린스키 (a&quot ";)) { if (! (파라머터스이제 (a&quot ";) instanceof Integer) { 새로운 것을 이가라구멍렉세페시옹 (.&quot ";). } a = (String) 파라머터스이제 (a&quot ";). } else if (파라머터스.콘타린스키 (b&quot ";)) { //. } //. }

푸 (ImmutableMap.&lt, 문자열, 의 (Object&gt. a";; a&quot &quot &quot. &quot b&quot 2gb/s;; &quot &quot value&quot d";;;));

이러한 방식은 바람직한 결과를 얻기 위해 유념하십시오 중 하나를 조합할 수 있습니다.

해설 (8)

안타깝게도, 아니.

해설 (13)

죄송합니다. 그렇습네다.

void MyParameterizedFunction(String param1, int param2, bool param3=false) {}

자바 가상 머신 (jvm) 에 1.5 로 쓸 수 있다.

void MyParameterizedFunction(String param1, int param2, Boolean... params) {
    assert params.length  0 ? params[0].booleanValue() : false;
}

근데 너 기분은 자세한 정보는 생성 여부에 따라 달라야 합니다

new Boolean[]{}

각 가능하다.

여러 인스턴스용으로 데포터블 매개변수입니다:

void MyParameterizedFunction(String param1, int param2, bool param3=false, int param4=42) {}

자바 가상 머신 (jvm) 에 1.5 로 쓸 수 있다.

void MyParameterizedFunction(String param1, int param2, Object... p) {
    int l = p.length;
    assert l  0 && p[0] != null ? ((Boolean)p[0]).booleanValue() : false;
    int param4 = l > 1 && p[1] != null ? ((Integer)p[1]).intValue() : 42;
}

이 말 수 있는 기본 구문을 일치시킵니다 c++컴파일러는 디렉토리에만 매개변수입니다 &prs. 목록.

그 차이가 있을 수 있는 지 확인하는 시간 유형 문법, 이로 인해 그 매개 변수와 자료형 검사 중에 실행하십시오 데포터블 c++컴파일러는 컴파일하십시오.

해설 (9)

아니, 하지만 매우 쉽게 그들을 에뮬레이트합니다 수 있습니다. 도대체 무엇이 c++컴파일러는 없었다.

public: void myFunction(int a, int b=5, string c="test") { ... }

Java 로 될 것이라고 과부하된 기능:

public void myFunction(int a, int b, string c) { ... }

public void myFunction(int a, int b) {
    myFunction(a, b, "test");
}

public void myFunction(int a) {
    myFunction(a, 5);
}

앞서 언급한 것은 기본 매개변수입니다 모호한 경우가 발생할 수 있는 함수 오버로드. 즉 단순히 성립하지 않는 경우는 c++컴파일러는 볼 수 있습니다. 그래, 어쩌면 모호한 사례를 만들 수 있지만, 이러한 문제를 쉽게 처리할 수 있습니다. # 39 는 단순히 wasn&, Java, C++ 언어로 그들이성년에 작성자 t 는 - 이 때문일 것이다, 자신들이 훨씬 간단해진다는 오른쪽맞춤, 다른 문제다. 우리 # 39 는 Java 상태였기 때문에, 그는 기울이나 don& 단순한 것 같지는 않다.

해설 (6)

할 수 있는 JVM 에 스칼라 호환됩니까 실행됩니,) 는 java 프로그램. http://www.scala-lang.org/

예:

class Foo(var prime: Boolean = false, val rib: String)  {}
해설 (4)
        • 가능성은 있지만, 가장 간단한 방법은 이 기능을 구현할 수 있다.
public myParameterizedFunction(String param1, int param2, Boolean param3) {

    param3 = param3 == null ? false : param3;
}

public myParameterizedFunction(String param1, int param2) {

    this(param1, param2, false);
}
        • 삼항 연산자를 경우 '또는' 대신 사용할 수 있습니다.
public myParameterizedFunction(String param1, int param2, Boolean param3) {

    if (param3 == null) {
        param3 = false;
    }
}

public myParameterizedFunction(String param1, int param2) {

    this(param1, param2, false);
}
해설 (0)

근데 왜 내가 여기서 구현할 수 있는 내용의 명백하네 단순히 &quot default"; 매개변수입니다 교도관님도요?

public class Foo() {
        public void func(String s){
                func(s, true);
        }
        public void func(String s, boolean b){
                //your code here
        }
}

사용할 경우 기본값입니다 됩니다

func("my string");

그리고 만약 당신이 마음에 wouldn& # 39 기본값입니다 사용하는 것과, 사용할 수 있습니다.

func("my string", false);
해설 (4)

앞에서 언급한 것처럼 [코틀린] 는 스칼라 (https://kotlinlang.org/docs/reference/functions.html # 기본 인수만) 도 규모의 언급하지 않았다. 함수가 매개변수를 가질 수 있는 코틀린 기본값과 수도 있습니다 물론 다른 매개변수입니다) 는 다음과 같은 뜻이 있다.

fun read(b: Array, off: Int = 0, len: Int = b.size) {
    ...
}

Jvm 이 같은 스칼라, 코틀린 실행됩니 할 수 있고 쉽게 통합되므로 기존 자바 프로젝트.

해설 (0)

일반적으로 jave doesn& 막아보자구 # 39, 설탕, 통사 (임의) 할 수 있기 때문에 별로 없는 단순 욕금지 많이 했습니다.

해설 (4)

아니요.

같은 비헤이비어를 반군지역 디스크입니다. diskid 똑똑하시네 설정값으로 객체에 의해 얻을 수 있습니다. 하지만 그 어떤 케이스에 따라 편리하게 사용할 수 있습니다.

해설 (0)

It is not supported 수축됐는데 몇 가지 옵션을 가진 패턴을 사용하여 매개변수입니다 객체에는 같은 일부 구문 설탕.

public class Foo() {
    private static class ParameterObject {
        int param1 = 1;
        String param2 = "";
    }

    public static void main(String[] args) {
        new Foo().myMethod(new ParameterObject() {{ param1 = 10; param2 = "bar";}});
    }

    private void myMethod(ParameterObject po) {
    }
}

우리가 그들을 '와' 이 샘플링합니다 chunghwa 파라메트로비치 기본값과 오버라이드합니다 동급 인스턴스입니다 초기화하지 섹선에서 ' {param1 = 10; param2 = &quot bar&quot} ';;;

해설 (0)

이 솔루션은 시도하시겠습니까.

public int getScore(int score, Integer... bonus)
{
    if(bonus.length > 0)
    {
        return score + bonus[0];
    }

    return score;
}
해설 (0)

유사한 접근 방식을 &lt, https://stackoverflow.com/a/13864910/2323964&gt. 자바 가상 머신 (jvm) 에 사용할 수 있는 인터페이스입니다 8 은 사용할 수 있는 기본 게터. 이 공백 앞으로 더욱 강화될 것이 아니라, # 39 에 대한 자세한 정보 및 it& 모크이블 큰 관심을 가지고 있을 때 where you want to draw a bunch of 인스턴스들도 실제로 매개변수입니다.

public class Foo() {
    public interface Parameters {
        String getRequired();
        default int getOptionalInt(){ return 23; }
        default String getOptionalString(){ return "Skidoo"; }
    }

    public Foo(Parameters parameters){
        //...
    }

    public static void baz() {
        final Foo foo = new Foo(new Person() {
            @Override public String getRequired(){ return "blahblahblah"; }
            @Override public int getOptionalInt(){ return 43; }
        });
    }
}
해설 (0)

39, ve 이제 i& 데 사용할 수 있는 방법을 강구해야 상당 기간 이 메서드입니다 반환 값 # 39, 지금까지 내가 본 모든 참조용이므로 haven& t 생각해봤죠 추가 여긴 것이 유용할 수 있습니다.

"' int foo (int a) { 뭔가 수신기마다 // 반환합니다. }

int 푸 () { 반품하십시오 푸 (0); 여기서 0 은 kingdome. seattle. 기본값입니다 // } "'

해설 (0)

Java 메소드 호출 구성기는 를 사용할 수 있는 자동으로 생성할 구성기는 기본값입니다.

클래스, 인터페이스, 또는 @GenerateMethodInvocationBuilder 추가하기만 수 있는 방법을 @Default 매개 변수가 where you want 기본값입니다. A 구성기는 지정한 기본값에는 사용하여 컴파일 타임에 생성될 수 있는 주석입니다.

@GenerateMethodInvocationBuilder
public class CarService {
 public CarService() {
 }

 public String getCarsByFilter(//
   @Default("Color.BLUE") Color color, //
   @Default("new ProductionYear(2001)") ProductionYear productionYear,//
   @Default("Tomas") String owner//
 ) {
  return "Filtering... " + color + productionYear + owner;
 }
}

다음 메서드를 호출할 수 있습니다.

CarService instance = new CarService();
String carsByFilter = CarServiceGetCarsByFilterBuilder.getCarsByFilter()//
  .invoke(instance);

또는 다른 무언가를 기본값에는 설정합니다.

CarService instance = new CarService();
String carsByFilter = CarServiceGetCarsByFilterBuilder.getCarsByFilter()//
  .withColor(Color.YELLOW)//
  .invoke(instance);
해설 (0)

이 같은 문제를 반단면 수십 가지 이상의 정적 팩토리 패턴, 결국 도착할 수 있습니다. 크립토 API 를 볼 수 있는. 하지만 이 방법을 생각해 정렬하려면 설명하기 힘들다. 기본 생성자, 또는 그 밖의 경우, 중괄호 () 는 할 수 있는 유일한 방법은 전파하려면 스테이드 넘어 부울입니다 이바리드. (v 로 nulll 함께 기본값입니다 실패했습니다. 구성자를) 또는 정보를 얻을 수 있는 것은 결코 예외가 있을 때 다시 필드에서 특징이다.

내가 할 일을 역인 줄 수 수정하십시오 코드를 쓰기 못하니이는 구성자를 데릭쉐퍼드와. 즉, 두 줄 구성자를 건설 이바리드 dell. 객체에는 사용하여 내가 찾을 수 있지만, 나는 몇 가지 이유로 - 로 마이그레이션하려면 정적임 팩토리 패턴. 그냥 많이유 메서드 호출 할 수 있는 것 () 의 경우 문제가 될 수 있지만, 아직도 substituted& # 39, & # 39 설정값으로 동기화됨 우수 (보다)

내 생각엔 우리가 해야 할 일을 한 것처럼 서로 마주 본 기본값입니다 문자열이어야 = null 이 문제를 해결할 새로운 문자열 (&quot ";). 그 전에 문자열 변수를 할당 nulll 확인할지 멤버로 하고 구성자를 전달됩니다.

컴퓨터 과학, 성층권 기초형상 양은 매우 주목할 만한 수행되 자바 가상 머신 (jvm) 에.

C++ 및 드릴링됩니다 diskid 구입업체별 라이브러리, 예. # 39 의 대규모 인한 서버 it& 그들을 jave 아웃런 수 있는 대규모 툴박스. 검토인 정적임 초기화 블록, stay with us.

해설 (0)

This is how I did it. # 39, & # 39 의 편리한 대로 it& 아니라 아마도 내장된 옵션임 argument& # 39. 하지만, 사용자 정의 매개변수입니다 상대로 업무 완료.

public void postUserMessage(String s,boolean wipeClean)
{
    if(wipeClean)
    {
        userInformation.setText(s + "\n");
    }
    else
    {
        postUserMessage(s);
    }
}

public void postUserMessage(String s)
{
    userInformation.appendText(s + "\n");
}

난 그냥 내가 할 수 있는 문자열 (string) 또는 디이브이 호출하십시오 인컨텍스트 함께 이 같은 방식으로 이름을 호출하십시오 문자열으로 및 부울 값. 이 경우, 설정 위페클레인 대체할 수 있는 모든 텍스트의 진정한 내 extarea 제공된 구체화하십시오. 설정값입니다 위페클레인 거짓 또는 모든 텍스트를 단순히 것가운데 아웃해야 첨부됩니다 함께 제공된 extarea.

또한, 나는 단지 두 가지 방법을 디이브이 I am not 리피팅 코드의 기능을 추가할 수 있는 새로운 방법을 만들어 같은 이름의 extarea 재설정하십시오 미디어만을 사용하여 추가된 부울입니다.

사실 제가 생각하기에는 & # 39 는 Java 제공하는 것보다 조금 더 옵션임 argument& # 39;; 이후 우리 매개변수입니다 다음 코드를 상술합니다 기본값과 할 것 "이라고 말했다. 이 예에서 don& # 39, 내가 걱정할 필요가 없는 모든 iqn. 또 다른 방법을 추가한 거절당했군요. # 39 의 쉽게 읽을 수 있지만, 장기적으로 내 클래스용 it& 내 소박한 했다.

해설 (0)

아니, 하지만 우리는 다른 형태로 함수 오버로드.

없을 때 불렀으매 매개변수입니다 통과

void operation(){

int a = 0;
int b = 0;

} 

때 불렀으매 &quot a"; 매개변수입니다 전달되었습니다.

void operation(int a){

int b = 0;
//code

} 

통과 때 불렀으매 매개변수입니다 b

void operation(int a , int b){
//code
} 
해설 (0)