스칼라 클래스의 공용 클래스 멤버는 Java 클래스에서 액세스 할 수 없습니다.

나의

저는 스칼라를 배우고 있으며, 실습을 위해 기존 Java 클래스 중 일부를 스칼라로 변환하기 시작했습니다. 따라서 scala-java inter-op에 대해서도 배울 수 있습니다. 다음은 내 프로젝트 설정입니다.

Scala 클래스 :

@Entity
class DemoBeanScala{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @BeanProperty
    var Id: Long= _

    @BeanProperty
    var str: String= _

    @BeanProperty
    var num: Int = _

    @BeanProperty
    var d:Double = _

    def testFunc(printText: () => Unit){
      printText()
    }

    val pr = () => {
      println("functional programming test")
    }
}

Java 클래스 (추출) :

@RequestMapping("/demo")
public DemoBeanScala demo(@RequestParam(value="id") Long Id, @RequestParam(value="str") String str, @RequestParam(value="num") int num, @RequestParam(value="d") double d)
{
    DemoBeanScala dbs = new DemoBeanScala();
    dbs.setId(123456);
    dbs.setStr("sample text");
    dbs.setNum(1);
    dbs.setD(2.1);
    dbs.testFunc(dbs.pr);
    return dbs;
}

내가 배운 바에 따르면 DemoBeanScala 클래스의 pr 전에 수정자가 선언되지 않았으므로 Java 클래스에서 액세스 할 수 있어야합니다. 그러나 maven 컴파일 ( scala : compile 사용 )하고 Java 코드를 실행하면 pr이 DemoBeanScala 클래스에서 비공개라는 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

Cyäegha

javap 에서 컴파일 된 클래스를 보면 다음 과 같은 내용을 볼 수 있습니다.

public class DemoBeanScala {
  private final scala.Function0<scala.runtime.BoxedUnit> pr;
  public scala.Function0<scala.runtime.BoxedUnit> pr();
  // And some other stuff...
}

Java와 두 가지 중요한 차이점을 알 수 있습니다.

  • Scala는 균일 한 액세스 원칙을 존중 하므로 매개 변수 목록없이 메서드를 호출하거나 속성에 액세스하는 것 사이에는 차이가 없습니다. 이 작업을 수행하기 위해 스칼라 컴파일러는 공용 접근 자 메서드와 공용 속성을 나타내는 전용 필드를 생성합니다.
  • Java에는 매개 변수 목록이없는 메소드가 없습니다. 항상 최소한 빈 매개 변수 목록이 있습니다.

따라서 Java에서 , not 을 사용하여 pr속성 에 액세스해야합니다 (또는 다른 속성에 대해했던 것처럼를 사용하여 Java 스타일 getter를 생성 하고으로 액세스해야합니다 ).dbs.pr()dbs.pr@BeanPropertydbs.getPr()

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

공통 클래스의 플레이버 클래스에 액세스 할 수 없습니다.

분류에서Dev

클래스 java.beans.Beans는 수정자가 ""인 Perosn.PersonDAO 클래스의 멤버에 액세스 할 수 없습니다.

분류에서Dev

멤버 함수의 클래스 변수에 액세스 할 수 없습니다.

분류에서Dev

`[템플릿 클래스]의 인스턴스화에서 [멤버]는 보호됩니다. . .] [공개 구성원]에 액세스 할 수 없습니다. '

분류에서Dev

Jenkins Groovy (SharedLibrary) 클래스는 WorkflowScript 멤버에 액세스 할 수 없습니다.

분류에서Dev

파생 클래스에서 전용 멤버에 액세스 할 수 없습니다 (생성자가 기본 클래스에 정의되어 있어도)

분류에서Dev

Java의 다른 클래스에서 한 클래스에 액세스 할 수 없습니다.

분류에서Dev

클래스의 벡터 멤버에 액세스 할 수 없습니다.

분류에서Dev

파생 클래스의 공용 속성에 액세스 할 수 없습니다.

분류에서Dev

다른 Java 클래스에서 Kotlin 공용 상수에 액세스 할 수 없습니까?

분류에서Dev

BaseClass의 shared_ptr을 사용하여 파생 클래스의 멤버에 액세스 할 수 없습니다.

분류에서Dev

다른 클래스에서 클래스의 멤버 변수에 액세스

분류에서Dev

Java가 수퍼 클래스의 생성자에 액세스 할 수없는 서브 클래스를 허용하지 않는 이유는 무엇입니까?

분류에서Dev

싱글 톤 클래스에서 액세스 할 수없는 개인 멤버

분류에서Dev

2 개의 다른 클래스에 액세스 할 수있는 클래스를 제공합니까?

분류에서Dev

클래스에 선언 된 개인 멤버에 액세스 할 수 없습니다 : 큐 클래스 템플릿

분류에서Dev

하위 클래스의 개인 필드는 수퍼 클래스에서 액세스 할 수 있습니다.

분류에서Dev

다른 클래스 멤버 함수의 개인 멤버에 액세스 할 수있는 클래스 멤버 함수를 얻으려면 어떻게합니까?

분류에서Dev

Lazarus Pascal-클래스 메서드는 개인 멤버에 액세스 할 수 없습니다.

분류에서Dev

클래스 공용 속성에 액세스 할 수 없습니다.

분류에서Dev

Java에서 클래스 메소드에 액세스 할 수 없습니다.

분류에서Dev

C ++ 친구 클래스가 기본 클래스의 모든 멤버에 액세스 할 수 있습니까?

분류에서Dev

해당 클래스 C ++의 멤버 함수 내에서 클래스를 사용할 수 있습니까?

분류에서Dev

UWP 클래스 공용 속성에 액세스 할 수 없음

분류에서Dev

컴포지션 또는 친구 클래스를 사용하여 다른 클래스의 멤버 함수를`this '클래스의 멤버 함수로 액세스

분류에서Dev

같은 클래스의 정적 함수에서 클래스의 전용 멤버에 액세스하는 방법?

분류에서Dev

일반 UIViewController 하위 클래스의 하위 클래스는 InterfaceBuilder에서 사용할 수 없습니다.

분류에서Dev

서브 클래스의 서브 클래스가 조상의 보호 된 멤버에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

공개 대리자는 다른 클래스에서 액세스 할 수 없습니다.

Related 관련 기사

  1. 1

    공통 클래스의 플레이버 클래스에 액세스 할 수 없습니다.

  2. 2

    클래스 java.beans.Beans는 수정자가 ""인 Perosn.PersonDAO 클래스의 멤버에 액세스 할 수 없습니다.

  3. 3

    멤버 함수의 클래스 변수에 액세스 할 수 없습니다.

  4. 4

    `[템플릿 클래스]의 인스턴스화에서 [멤버]는 보호됩니다. . .] [공개 구성원]에 액세스 할 수 없습니다. '

  5. 5

    Jenkins Groovy (SharedLibrary) 클래스는 WorkflowScript 멤버에 액세스 할 수 없습니다.

  6. 6

    파생 클래스에서 전용 멤버에 액세스 할 수 없습니다 (생성자가 기본 클래스에 정의되어 있어도)

  7. 7

    Java의 다른 클래스에서 한 클래스에 액세스 할 수 없습니다.

  8. 8

    클래스의 벡터 멤버에 액세스 할 수 없습니다.

  9. 9

    파생 클래스의 공용 속성에 액세스 할 수 없습니다.

  10. 10

    다른 Java 클래스에서 Kotlin 공용 상수에 액세스 할 수 없습니까?

  11. 11

    BaseClass의 shared_ptr을 사용하여 파생 클래스의 멤버에 액세스 할 수 없습니다.

  12. 12

    다른 클래스에서 클래스의 멤버 변수에 액세스

  13. 13

    Java가 수퍼 클래스의 생성자에 액세스 할 수없는 서브 클래스를 허용하지 않는 이유는 무엇입니까?

  14. 14

    싱글 톤 클래스에서 액세스 할 수없는 개인 멤버

  15. 15

    2 개의 다른 클래스에 액세스 할 수있는 클래스를 제공합니까?

  16. 16

    클래스에 선언 된 개인 멤버에 액세스 할 수 없습니다 : 큐 클래스 템플릿

  17. 17

    하위 클래스의 개인 필드는 수퍼 클래스에서 액세스 할 수 있습니다.

  18. 18

    다른 클래스 멤버 함수의 개인 멤버에 액세스 할 수있는 클래스 멤버 함수를 얻으려면 어떻게합니까?

  19. 19

    Lazarus Pascal-클래스 메서드는 개인 멤버에 액세스 할 수 없습니다.

  20. 20

    클래스 공용 속성에 액세스 할 수 없습니다.

  21. 21

    Java에서 클래스 메소드에 액세스 할 수 없습니다.

  22. 22

    C ++ 친구 클래스가 기본 클래스의 모든 멤버에 액세스 할 수 있습니까?

  23. 23

    해당 클래스 C ++의 멤버 함수 내에서 클래스를 사용할 수 있습니까?

  24. 24

    UWP 클래스 공용 속성에 액세스 할 수 없음

  25. 25

    컴포지션 또는 친구 클래스를 사용하여 다른 클래스의 멤버 함수를`this '클래스의 멤버 함수로 액세스

  26. 26

    같은 클래스의 정적 함수에서 클래스의 전용 멤버에 액세스하는 방법?

  27. 27

    일반 UIViewController 하위 클래스의 하위 클래스는 InterfaceBuilder에서 사용할 수 없습니다.

  28. 28

    서브 클래스의 서브 클래스가 조상의 보호 된 멤버에 액세스 할 수없는 이유는 무엇입니까?

  29. 29

    공개 대리자는 다른 클래스에서 액세스 할 수 없습니다.

뜨겁다태그

보관