java调用scala程序

用Java在各种框架下编译Scala项目

在IDE上的设置

首先 下载的IntelliJ IDEA的 x(社区版) 因为目前它是最好的Scala的IDE 然后选择File |设置|插件 选择可用的选项卡来安装Scala插件

创建Maven项目

在IntelliJ IDEA中 选择文件|新建项目 然后选择Maven的模块创建一个Maven项目 然后修改如下所示的pom xml 添加所有你需要的设置 建立Scala的汇编语言

project xmlnsxmlns= xmlns:xsi= instance

         xsi:schemaLocation= v _ _ xsd

    modelVersion /modelVersion

    groupId foo/groupId

    artifactIdmyapp/artifactId

    packagingwar/packaging

    version SNAPSHOT/version

    namemyapp Java EE Webapp/name

    url;/url

    properties

        spring version RELEASE/spring version

     /properties

    repositories

        repository

            id /id

            nameRepository hosting the jee artifacts/name

            url;/url

         /repository

        repository

            id/id

             nameScala tools Maven Repository/name

            url;/url

        /repository

        repository

             idwpt release/id

            url repo/releases/url

        /repository

        repository

             idwpt snapshot/id

            url repo/snapshots/url

        /repository

    /repositories

    pluginRepositories

        pluginRepository

            id/id

            nameScala tools Maven Repository/name

            url;/url

         /pluginRepository

    /pluginRepositories

    dependencyManagement

        dependencies

            dependency

                 groupId springframework/groupId

                artifactIdspring context/artifactId

                version${spring version}/version

             /dependency

             dependency

                groupId springframework/groupId

                artifactIdspring core/artifactId

                version${spring version}/version

            /dependency

            dependency

                groupId springframework/groupId

                 artifactIdspring web/artifactId

                version${spring version}/version

             /dependency

             dependency

                groupId springframework/groupId

                 artifactIdspring orm/artifactId

                version${spring version}/version

            /dependency

        /dependencies

    /dependencyManagement

    dependencies

        dependency

            groupId h database/groupId

            artifactIdh /artifactId

            version /version

        /dependency

        dependency

             groupId hibernate/groupId

            artifactIdhibernate entitymanager/artifactId

            version GA/version

        /dependency

        dependency

            groupId springframework/groupId

            artifactIdspring orm/artifactId

        /dependency

        dependency

            groupIddev/groupId

            artifactIdwpt core/artifactId

            version SNAPSHOT/version

            scopetest/scope

        /dependency

        dependency

            groupIddev/groupId

            artifactIdwpt runtime spring/artifactId

             version SNAPSHOT/version

        /dependency

        dependency

             groupIdjavax/groupId

            artifactIdjavaee web api/artifactId

            version /version

            scopeprovided/scope

        /dependency

        dependency

            groupIdjunit/groupId

            artifactIdjunit/artifactId

            version /version

            scopetest/scope

        /dependency

        dependency

            groupId scala lang/groupId

            artifactIdscala library/artifactId

            version RC /version

        /dependency

        dependency

            groupId apache wicket/groupId

            artifactIdwicket/artifactId

            version /version

        /dependency

        dependency

            groupId slf j/groupId

            artifactIdslf j log j /artifactId

            version /version

        /dependency

    /dependencies

    build

        pluginManagement

            plugins

                 plugin

                    groupId apache maven plugins/groupId

                    artifactIdmaven piler plugin/artifactId

                     version /version

                /plugin

                plugin

                     groupId scala tools/groupId

                    artifactIdmaven scala plugin/artifactId

                    version /version

                /plugin

            /plugins

        /pluginManagement

        plugins

            plugin

                 groupId apache maven plugins/groupId

                artifactIdmaven piler plugin/artifactId

                executions

                    execution

                        phasepile/phase

                        goals

                            goalpile/goal

                        /goals

                    /execution

                /executions

                configuration

                    source /source

                    target /target

                /configuration

            /plugin

            plugin

                groupId apache maven plugins/groupId

                 artifactIdmaven war plugin/artifactId

                version beta /version

                configuration

                    failOnMissingWebXmlfalse/failOnMissingWebXml

                 /configuration

            /plugin

            plugin

                 groupId scala tools/groupId

                artifactIdmaven scala plugin/artifactId

                executions

                    execution

                         idscala pile first/id

                        phaseprocess resources/phase

                         goals

                            goaladd source/goal

                            goalpile/goal

                        /goals

                    /execution

                    execution

                         idscala test pile/id

                        phaseprocess test resources/phase

                         goals

                            goaltestCompile/goal

                        /goals

                    /execution

                /executions

            /plugin

        /plugins

        finalNamemyapp/finalName

    /build

/project

web xml中设置

接下来 修改main/webapp/WEB INF/web xml 从而确立了Wicket的过滤器 打开Spring的JPA实体管理器和Spring监听器 进行Spring的初始化

?xml version= encoding= UTF ?

web app version= xmlns= xmlns:xsi= instance

         xsi:schemaLocation= app_ _ xsd

     filter

         filter namef /filter name

        filter class springframework orm jpa support OpenEntityManagerInViewFilter/filter class

    /filter

    filter

         filter namef /filter name

        filter class apache wicket protocol WicketFilter/filter class

         init param

            param nameapplicationClassName/param name

            param value foo myapp MyApp/param value

         /init param

    /filter

    filter mapping

        filter namef /filter name

        url pattern/app/*/url pattern

    /filter mapping

    filter mapping

        filter namef /filter name

        url pattern/*/url pattern

    /filter mapping

    context param

        param namecontextConfigLocation/param name

        param valueclasspath:/beans xml/param value

    /context param

    listener

        listener class sprntext ContextLoaderListener/listener class

     /listener

/web app

设置Spring bean访问和调用的数据库

要定义这些Spring bean 创建main/resources的beans xml以及一下的内容

?xml version= encoding= UTF ?

beansxmln *** eansxmlns=

        xmlns:xsi= instance

       xmlns:context=

        xmlns:tx=

       xsi:schemaLocation=

        beans xsd

        

        context xsd

        

        tx xsd

     context:ponent scan base package= foo myapp /

    bean id= emf class= springframework orm jpa LocalContainerEntityManagerFactoryBean

        property name= persistenceXmlLocation value= classpath:/META INF/my persistence xml /

     /bean

    bean id= transactionManager class= springframework orm jpa JpaTransactionManager

        property name= entityManagerFactory ref= emf /

     /bean

    tx:annotation driven /

/beans

读取数据库配置中persistence xml文件 在这里 您将获得一个主目录中名为MyApp的H 数据库 因此 创建main/resources/META INF文件的内容如下

persistencexmlnspersistencexmlns=

            xmlns:xsi= instance

            xsi:schemaLocation= _ _ xsd

             version=

   persistence unit name= myapp transaction type= RESOURCE_LOCAL

        provider hibernate ejb HibernatePersistence/provider

        properties

           propertynamepropertyname= nnection driver_class value= h Driver /

           property name= nnection url value= jdbc:h :tcp://www.easyaq.com/~/myapp /

            propertynamepropertyname= nnection username value= sa /

            propertynamepropertyname= nnection password value= /

           property name= hibernate dialect value= hibernate dialect H Dialect /

           property name= hibernate hbm ddl auto value= create /

        /properties

   /persistence unit

/persistence

创建Wicket的页面

在这里 您将创建一个Wicket页面显示从数据库加载一些内容 因此 创建主/Scala文件夹 右键单击它并选择新建|Scala类 命名为我的页面类和投入 foo myapp包中 如下所示

package foo myapp

import apacl _

import basic Label

import list {ListItem ListView}

import apache wicket spring injection annot SpringBean

import apache wicket model CompoundPropertyModel

class MyPage extends WebPage {

  @SpringBean

   var ps: ProductService = _

  val productListView = newListView[Product]( productListView ps getAll) {

     def populateItem(item: ListItem[Product]) = {

      item setModel(newCompoundPropertyModel[Product](item getDefaultModelObject))

      item add(new Label( name ))

      item add(new Label( price ))

    }

  }

  add(productListView)

}

请注意 在创建ProductService对象加载的文件之后使用 此外 请注意该字段被分配到一个下划线(_) Scala编译为不可初始化的 而是留在默认状态 在你将覆盖作为编译之前 执行Spring bean的页面构造 现在 创建在src/main/resources//foo/myapp的的l文件

!DOCTYPE HTML PUBLIC //W C//DTD HTML Transitional//EN

    table border=

        tr wicket:id= productListView

            td wicket:id= name /td

            td wicket:id= price /td

        /tr

    /table

/

创建ProductService

右键单击在in the src/main/scala文件夹中的 foo myapp包并选择New | Scala的类 然后选择创建ProductService

package foo myapp

import java util List

trait ProductService {

  def getAll: List[Product]

}

这是接口 对创造一个DefaultProductService的Scala在同一个包内进行执行操作

package foo myapp

import javax persistence {PersistenceContext EntityManager}

import springframework stereotype {Service}

import springframework transaction annotation Transactional

import springframework beans factory annotation Autowired

@Service

@Transactional

class DefaultProductService extends ProductService {

  @Autowired

  var products: Products = _

  def getAll = products getAll

}

请注意 把它使用类型文件命名为DAO

创建文件的DAO

要创建的DAO 创建一个名为在同一文件夹

package foo myapp

import java util List

trait Products {

   def getAll: List[Product]

}

然后创建在同一文件夹中的执行Scala的DefaultProducts文件

package foo myapp

import javax persistence {PersistenceContext EntityManager}

import springframework stereotype Repository

import java util List

@Repository

class DefaultProducts extends Products {

  @PersistenceContext

  var em: EntityManager = _

  def getAll = {

    em createQuery( select p from Product p ) getResultList asInstanceOf[List[Product]]

  }

}

创建entity程序

创建entity程序并将其映射到数据库

package foo myapp

import javax persistence {GeneratedValue Id Entity}

@Entity

class Product {

  @Id

  @GeneratedValue

  var id: Long = _

  var name: String = _

  var price: Double = _

}

创建Wicket的应用程序

最后 创建在同一个MyApp的Scala程序

package foo myapp

import apache wicket protocol WebApplication

dev wicketpagetest MockableSpringBeanInjector

class MyApp extends WebApplication {

  def getHomePage = classOf[MyPage]

   override def init = {

    MockableSpringBeanInjector installInjector(this)

  }

}

在这里 您指定为首页我的目录 植入Spring Bean中

运行应用程序

随着IntelliJ IDEA的版本不断改进 您将嵌入到应用服务器运行您的应用程序 这非常容易 在刚刚创建的测试 foo myapp的ManualTest在刚刚创建的测试 foo myapp包一类ManualTest/scala文件(不是main/scala文件) 以下内容是

package foo myapp

dev wicketpagetest {WebAppJettyConfiguration WicketAppJettyLauncher}

object ManualTest {

  def main(args: Array[String]) {

    val l = new WicketAppJettyLauncher

    l startAppInJetty(new WebAppJettyConfiguration)

  }

}

要运行的应用程序 首先需要运行数据库服务器上的H 程序 所以 在下载和解压 然后变成h /bin和运行h bat(或在Linux上h sh) ManualTest是在IDEA的编辑器上 在IDEA选择运行DEA 它将运行ManualTest Jetty的运行您的应用程序

为了测试它 请尝试通过在浏览//www.easyaq.com: /app

不知道各位感觉如何 感谢各位支持!谢谢!

lishixinzhi/Article/program/Java/hx/201311/26175

如何将如下的java代码用scala写

@RunWith(Parameterized.class)

public class MeetingHttpApiTest extends TestBase {

@Test

public void testMeetingHttpApi() {

TedaCaseVo tedaCaseVo = tedaCaseService.getTedaCase(tedaCaseId);

String url = tedaCaseVo.getParamJsonStr();

TedaTool.record(tedaCaseVo, SwordHttp.get(url), tedaCaseService);

}

@Parameters

public static Collection data() {

return Arrays.asList(new Object[][]{{22L}, {23L}, {24L},{25L}, {26L}, {27L}});

}

public MeetingHttpApiTest(Long tedaCaseId) {

this.tedaCaseId = tedaCaseId;

}

protected Long tedaCaseId = 1L;

}

其中,TestBase类:

@SpringApplicationConfiguration(classes = Application.class)

@WebAppConfiguration

public class TestBase {

@Autowired

protected TedaCaseService tedaCaseService;

private TestContextManager testContextManager;

@Before

public void setUpContext() throws Exception {

this.testContextManager = new TestContextManager(getClass());

this.testContextManager.prepareTestInstance(this);

}

}

求助!scala如何调用java静态方法

Scala没有静态方法或静态字段,可以用object这个语法结构来达到同样的目的,对象定义了某个类的单个实例,包含了你想要的特性。

例如:

object Accounts{

private var lastNumber = 0

def newUniqueNumber()={lastNumber+=1;lastNumber}

}

当你在应用程序中需要一个新的唯一账号时,调用Account.newUniqueNumber()即可。

java调用scala程序

scala trait 接口java怎么使用

今天说一说Java中的接口和Scala中的trait。一直就把特质当做半个接口用,因为确实挺像的,但仔细看,还是有很大区别的。

1.接口不会有构造器,特质可以有构造器,并且在实现类继承特质的时候,先要调用特质的构造器。

trait构造器的调用顺序小结:

class B{}

trait C extends E{}

trait D extends E{}

A extends B with C with D

(1)先调用父类构造器B

(2)继承多个trait从从左至右依次执行,先调用父trait E构造器,再调用C,再调用D构造器

(3)如果多个trait继承同一个父trait,则父trait只执行一次

(4)所有父类构造器和trait构造器执行完毕之后再执行自己的构造器A

2.接口中不能有未初始化的属性,且属性的修饰都是public static final,特质中可以有未初始化的属性变量,即抽象字段;

未初始化的属性可以有提前定义的特性,有两种方法,例如:

trait A{

val name:String//抽象字段

println(“name: “+name)//特质中构造器执行的语句

}

class B extends A{

val name:String = “张三”

}

此时如果在main函数中new B的话,肯定会报错,因为new B必然先会调用特质中的构造器,而name并没有被赋值,所以会报错。有三种方法解决:

(1)class B extends {

val name:String = “张三” //提前定义在类前

} with A{}

(2)class B{}

main函数中new B的时候:

val b = new {

val name:String = “张三”//提前定义在new对象前

} with B with A

(3)利用lazy特性

trait A{

lazy val name:String = null

println(“name: “+name)

}

class B extends A{

override lazy val name:String = “张三”

}

scala.reflect.classtag java怎么传入

Java 和 Scala 都支持变参方法, 写在最后的位置上,最基本的调用方式也都是一样的,一个个罗列过去。也可以传入数组参数,因为变参本质上就是一个数组,就是把 … 开始位置到最后一个参数都收纳到数组中去,所以变参之所以要放在最后的位置上,且一个方法中最多只能有一个变参类型。

这里主要是对比 Scala 对变参方法的调用,基本调用法当然是没问题的,但是在传入数组作为变参的参数列表与 Java 相对时就稍有变化了。

另外提一下,如果想传入 List 作为变参列表,而不是整体作为变参的第一个元素就是调用集合的 toArray() 方法转换成一个数组传入。

下面看 Java 中对变参方法的调用,参数列表和数组

public class JavaVarArgs {

public static void main(String[] args) {

foo(“a”, “b”, “c”);

foo(new String[]{“d”, “e”});

}

public static void foo(String…params) {

System.out.println(params + ” : ” + params.length);

for(String s: params) {

System.out.println(s);

}

}

}

从输出结果能够很明白的看出变参 params 实际上就是一个数组

[Ljava.lang.String;@3f91beef : 3

a

b

c

[Ljava.lang.String;@1a6c5a9e : 2

d

e

我们知道 Scala 和 Java 之间可以互相调用,现在写一段 Scala 代码来调用 foo() 方法

object ScalaVarArgs {

def main(args: Array[String]) {

JavaVarArgs.foo(“a”, “b”, “c”)

// JavaVarArgs.foo(Array[String](“d”, “e”))

}

}

JavaVarArgs.foo(“a”, “b”, “c”) 调用没问题

而 JavaVarArgs.foo(Array[String](“d”, “e”)) 会有编译问题

Type mismatch: expected String, actual Array[String]

Java 在调用变参方法时可以直接传入相应类型的数组,而 Scala 确不允许这么做了,因它试图把 Array[String] 整体作为一个元素传递给 foo() 方法,而 foo() 要求的元素类型是字符串,所以编译不过。

而 Scala 这时该如何使得与 Java 调用变参方法时的行为一致呢,那就是在调用时再附加说明:是要把数组中的元素逐个传递级变参,写法

JavaVarArgs.foo(Array[String](“d”, “e”) :_*)

这样的调用输出就是

本文原始链接 , 来自隔叶黄莺 Unmi Blog

[Ljava.lang.String;@7a718e31 : 2

d

e

如果从上面的例子说来,我们的运气还不错,因为编译器告诉了你出现了什么问题。最麻烦的问题总是在能编译,但运行时诡异的情况。

因为在我本人实际中遭遇到的情形是变参类型是 Object 的方法,形如

public static void foo(Object…params) {

System.out.println(params + ” : ” + params.length);

for(Object o: params) {

System.out.println(o);

}

}

上面把参数改为 Object…params, 不会改变 Java 传数组调用它的行为,但却增加了 Scala 调用它时的排错难度。

在 Scala 中使用 foo(Array[String](“d”, “e”) 调用并没有编译错误,加入上面的调试代码才发现,不管传入多大的数组,总是输出像

[Ljava.lang.Object;@7814d044 : 1

[Ljava.lang.String;@ea25c1

说方法只接收到了一个元素,类型被识别为形参的类型,不过进一步遍历变参,发现第一个元素是一个字符串数组,所以 Scala 把 Array[String](“d”, “e”) 整体作为 params 的第一个元素传给了 foo() 方法。写成

foo(Array[String](“d”, “e”) : _*)

是为了把数组拆散了传给 foo() 方法。

起初以为是 Scala 调用 Java 的变参方法需要这么做,后来重新用 Scala 实现下变参方法

def foo(params: AnyRef*) {

println(params + ” : ” + params.length)

for (s – params) {

println(s)

}

}

用 Scala 代码来调用它,传入数组,如果不想整体作为一个元素时也必须加上 : _*参数说明,同样的:

foo(Array[String](“d”, “e”) :_*)

在写这篇之前,我所认定的这是 Scala 调用变参方法的一个缺陷, : _* 似乎是一种默认行为,现在认为这恰恰是 Scala 的一个灵活性所在。Scala 提供了两种方式来传递数组给变参,而为何 Java 不让数组整体作为变参的一个元素呢,不过 Scala 放开这一特性,当变参为 Object… params 确实放大了 Bug 的出现机率。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月28日 05:29:49
下一篇 2024年3月28日 05:38:01

相关推荐

  • 深入java虚拟机pdf,深入java虚拟机 中村成洋 pdf

    在linux环境下,java怎么实现从word格式转换为pdf格式 //设置当前使用的打印机,我的Adobe Distiller打印机名字为 Adobe PDF wordCom.setProperty( ActivePrinter , new Variant( Adobe PDF ));//设置printout的参数,将word文档打印为postscript…

    2024年5月23日
    4400
  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4200
  • java绑定一个端口,java使用端口

    java如何多个service共用一个端口 你如果有多个项目的话,你可以把多个项目放到一个tomcat里面,这样端口相同使用项目名称来进行区分项目。你如果非要使用同一个,你也可以配置不同的域名导向不同的项目。就是访问的域名不同转接到的项目不同。 如果需要同时启动多个程序,要么修改tomcat的配置文件中的监听端口。要么修改jar包程序的监听端口。不能在一台服…

    2024年5月23日
    3500
  • java多线程并发编程基础,Java多线程并发执行返回

    电脑培训分享Java并发编程:核心理论 电脑培训发现本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。 人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接…

    2024年5月23日
    4700
  • 自学java找工作,自学java找工作需要包装简历吗

    自学java学多久可以找到工作 1、自学Java至少需要一年以上的时间才能达到找工作的水平。报班培训四到六个月的时间就可以找到一份不错的工作。 2、自学Java至少需要一年以上的时间才能达到找工作的水平。 3、如果要想找到一份Java相关的工作,需要至少学习5-6个月时间才能就业。Java开发需要掌握一些基础的编程语言知识,比如掌握面向对象的编程思想、基本的…

    2024年5月23日
    4300
  • java左移右移,java 左移

    java位移问题 1、思路:直接用Integer类的bit运算操作。 2、移位操作:左移:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。 3、Java 位运算 Java 位运算[转]一,Java 位运算表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的…

    2024年5月23日
    4200
  • java技术规范,java规范性要求

    现在主流的JAVA技术是什么? java最流行开发技术程序员必看 1 、Git Git一直是世界上最受欢迎的Java工具之一,也是Java开发人员最杰出的工具之一。Git是一个开源工具,是-种出色的分布式版本控制解决方案。 (1).Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱和注解。(2).Java面向对象编…

    2024年5月23日
    4000
  • javasocket编程,Java socket编程中,禁用nagle算法的参数

    Java进行并发多连接socket编程 1、Java可利用ServerSocket类对外部客户端提供多个socket接口。基本的做法是先创建一个ServerSocket实例,并绑定一个指定的端口,然后在这个实例上调用accept()方法等待客户端的连接请求。 2、Socket socket=server.accept(0;Thread handleThrea…

    2024年5月23日
    4600
  • java死亡,java死代码是什么意思

    我的世界传送回死亡点指令是什么? 1、下面就让我们一起来了解一下吧:我的世界回到死的地方的指令是输入/back,就可以回到死亡地点了,当然也可以看信标,因为死亡后会有一道光集中在死亡点,只要循着光就可以找到目的地了。 2、在服务器中的指令 首先打开指令台,在指令行输入“/back”就可以回到自己的死亡地点了。在单人游戏中的指令 在单人游戏中,您无法直接返回到…

    2024年5月23日
    4800
  • myeclipse能部署java工程么,myeclipse支持jdk18

    myeclipse如何建java文件 1、点击【File】—【New】–【Class】在如下界面,输入Class的名字,如Test,点击【Finish】。Test.java文件创建成功。 2、点击【File】—【New】–【Class】 在如下界面,输入Class的名字,如Test,点击【Finish】。 Te…

    2024年5月23日
    3900

发表回复

登录后才能评论



关注微信