저는 스칼라를 배우고 있으며, 실습을 위해 기존 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 클래스에서 비공개라는 오류가 발생합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
javap 에서 컴파일 된 클래스를 보면 다음 과 같은 내용을 볼 수 있습니다.
public class DemoBeanScala {
private final scala.Function0<scala.runtime.BoxedUnit> pr;
public scala.Function0<scala.runtime.BoxedUnit> pr();
// And some other stuff...
}
Java와 두 가지 중요한 차이점을 알 수 있습니다.
따라서 Java에서 , not 을 사용하여 pr
속성 에 액세스해야합니다 (또는 다른 속성에 대해했던 것처럼를 사용하여 Java 스타일 getter를 생성 하고으로 액세스해야합니다 ).dbs.pr()
dbs.pr
@BeanProperty
dbs.getPr()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다