2016-09-28 2 views
0

이 선언에 어떤 문제가 있습니까? 주어진 코드에서 public이 허용되지 않는 이유는 무엇입니까?스칼라의 "public"val 생성자 매개 변수

class Alpha(public val a:Int,public val b:Int) 

바보 같은 질문 일 수도 있지만 캡슐화 때문인가?

+3

'public'은 (는) 스칼라에서 키워드가 아니기 때문에. 물건은 기본적으로 '공개'입니다. (이것은 Java와는 다릅니다!). – Jesper

+0

나는 거기 있다고 생각했다. 자바이기 때문에. 나는 거기에있을 것이다. 감사합니다. – optional

+0

스칼라는 자바가 아닙니다. 자바에 존재하는 것이 스칼라에도 존재한다는 것을 의미하지는 않습니다. 나는 스칼라 접근 수정 자에 관한 blogpost를 썼다. [스칼라 접근 수정 자와 한정어에 대해 자세히] (http://www.jesperdj.com/2016/01/08/scala-access-modifiers-and-qualifiers-in-detail/) – Jesper

답변

5

스칼라에서는 키워드가 public입니다. 스칼라의 기본 Access 수정자는 public입니다. 귀하의 경우 생성자 서명에서 public을 제거하면 매개 변수가 공개됩니다.

//Public 
class Alpha(val a: Int, val b: Int){} 

//Private 
class Alpha(private val a: Int, private val b: Int){} 
+0

좀 더 복잡합니다. 클래스 C (x : Int)'와'클래스 C (val x : Int)'를 사용합니다. 'val'과'var'만이 기본적으로 public입니다. 전자는 항상 개인 필드를 정의합니다. –

+0

사실, 이전의'클래스 C (x : Int)'는 private 필드를 정의하지 않습니다. 현재 인스턴스에서만 액세스 할 수있는 생성자 arg를 정의합니다. – eques