Có điều gì đó giống như chế độ REPL tương tác của python, nhưng dành cho Java không?


92

Có điều gì đó giống như chế độ REPL tương tác của python, nhưng dành cho Java không? Để tôi có thể, chẳng hạn, gõ InetAddress.getAllByName( localHostName )vào một cửa sổ và ngay lập tức nhận được kết quả, mà không có tất cả những điều ác mộng void () công khai này?



Câu trả lời:


64

chỉnh sửa Vì Java 9 có JShell

Câu trả lời gốc sau

Bạn cũng có thể sử dụng Groovy Console . Nó là một bảng điều khiển tương tác, nơi bạn có thể làm những gì bạn muốn. Vì Groovy cũng bao gồm các lớp từ nền tảng java lõi, nên bạn cũng có thể sử dụng các lớp đó.

Nó trông như thế này:

Ảnh chụp màn hình Groovy


Ảnh chụp màn hình không còn tồn tại trên imageshack.

Có gì đặc biệt tốt đẹp về groovy console là rất nhiều gói được nhập khẩu theo mặc định, do đó bạn không cần phải viết rất nhiều báo cáo nhập khẩu (ví dụ java.util. *)
Dónal

2
Đối với những người quá lười cài đặt Groovy, có một phiên bản trực tuyến của bảng điều khiển này tại đây: groovyconsole.appspot.com . Một số lib JDK không khả dụng (ví dụ như I / O và System.exit()) nhưng đối với hầu hết các mục đích, nó phải đủ.
Dónal

Điều này không chấp nhận các lớp học là điều bình thường? class test{public static void test(){System.out.println('test')}}
Lime

52

Eclipse có một tính năng để làm điều này, mặc dù nó không phải là một vòng lặp. Nó được gọi là "Trang sổ lưu niệm". Tôi giả định rằng sự tương tự được cho là bạn có một sổ lưu niệm nơi bạn thu thập các đoạn mã nhỏ.

Dù sao, để làm cho nó hoạt động, hãy mở một dự án trong Eclipse (Trang Sổ lưu niệm của bạn sẽ được liên kết với một dự án - Eclipse thích nó khi các dự án sở hữu những thứ riêng).

Sau đó:

  1. Trong cửa sổ điều hướng dự án, chọn một thư mục tồn tại ở đâu đó trong dự án của bạn.
  2. Chọn menu Tệp -> Mới -> Khác hoặc nhấn Control-N.
  3. Chọn Java -> Java Run / Debug -> Scrapbook Page.
  4. Nhấn "Tiếp theo", sau đó đặt tên tệp, sau đó nhấn "Kết thúc".

Bây giờ bạn có một trang sổ lưu niệm. Nhập một số mã, có thể như thế này:

System.out.println(System.getProperties());

Sau đó, chọn văn bản bằng chuột và nhấn Control-U hoặc chọn "Execute" từ menu ngữ cảnh. Mã sẽ chạy và đầu ra sẽ xuất hiện trên bảng điều khiển.

Bạn cũng có thể nhập một biểu thức, chọn biểu thức đó và chọn Hiển thị từ menu ngữ cảnh. Nó sẽ đánh giá biểu thức và in loại của nó. Ví dụ: chạy Hiển thị trên 1 + 2sẽ in (int) 3.


1
Cảm ơn vì điều đó. Beanshell đã hết thời gian chờ đợi đối với tôi, nhưng điều này hoạt động hoàn hảo.
Bayard Randel

3
Tôi đã sử dụng Eclipse quá lâu nhưng không biết về điều này, cảm ơn!
Tobold

28

BeanShell là một trình thông dịch mã nguồn Java nhỏ, miễn phí, có thể nhúng với các tính năng ngôn ngữ kịch bản đối tượng, được viết bằng Java. BeanShell tự động thực thi cú pháp Java tiêu chuẩn và mở rộng nó với các tiện ích phổ biến của tập lệnh như các kiểu rời, lệnh và đóng phương thức giống như trong Perl và JavaScript. Bạn có thể sử dụng BeanShell một cách tương tác để thử nghiệm và gỡ lỗi Java cũng như để mở rộng ứng dụng của mình theo những cách mới. Scripting Java cho phép nhiều ứng dụng khác nhau bao gồm tạo mẫu nhanh, tiện ích mở rộng kịch bản người dùng, công cụ quy tắc, cấu hình, thử nghiệm, triển khai động, hệ thống nhúng và thậm chí cả giáo dục Java.

http://www.beanshell.org/

http://www.beanshell.org/manual/syntax.html#Standard_Java_Syntax


Ngoài ra còn có các shell tương tác Jython và JRuby cho các cú pháp ít dài dòng hơn.
bakkal

1
BeanShell đang tích cực duy trì như beanshell 2 - code.google.com/p/beanshell2
hshib


@hshib: Nó hiện đang ở Github và lần cam kết cuối cùng là từ năm 2013. Điều đó không được "duy trì tích cực".
Martin Schröder

@ MartinSchröder, nhận xét đó CÓ vào năm 2013 :-)
hshib

19

Bạn có thể sử dụng các trang Sổ lưu niệm Eclipse.

Trong Eclipse, hãy tạo một trang Sổ lưu niệm. Trong dự án của bạn, Trang mới-> Khác-> Sổ lưu niệm.

Trong tệp, nhập một số văn bản, chọn văn bản đó và nhấn ctrl-U, vậy là xong.

Để quản lý quá trình nhập của bạn, hãy nhấp chuột phải vào trang và chọn Đặt Nhập, tại đây bạn có thể chọn nhập một gói hoặc một lớp. Điều này liên tục và được lưu cùng với trang.


3
Hữu ích vì nó có thể được, một trang sổ lưu niệm không phải là một phiên liên tục, vì vậy không thực sự hoạt động tốt như một REPL.
MHarris

19

Câu hỏi cũ, nhưng có câu trả lời tốt hơn bây giờ (tháng 5 năm 2013) - java-REPL! Nó có sẵn trên github và cũng có sẵn trực tiếp tại trang web java-repl để thử nghiệm nhanh một lần.

Nếu bạn lấy mã trung tâm git và chạy antđể tạo các tạo tác, bạn có thể làm cho nó dễ sử dụng với một tập lệnh nhỏ như:

#!/bin/sh
java -jar /home/rdahlgren/scripts/javarepl-dev.build.jar

Kể từ khi tìm thấy dự án này, tôi có thể sử dụng nó 5 lần một ngày. Thưởng thức!


Liên kết cho đại diện trực tuyến bây giờ có vẻ là javarepl.com/term.html liên kết cũ chỉ hiển thị lỗi Java.
Tony

13

Có vẻ như chưa ai đề cập đến việc Java (6, 7) cung cấp bảng điều khiển REPL được gọi là jrunscript. Nó là ngôn ngữ bất khả tri (vì vậy có thể được sử dụng với Jython, JRuby, v.v.). Nó mặc định là JavaScript (Rhino) cũng được đóng gói theo mặc định và giống như các ngôn ngữ khác, bạn có thể truy cập tất cả các gói / đối tượng có sẵn trên classpath.




11

Jython là một triển khai python cho phép bạn kiểm tra và tương tác với các đối tượng Java.

>>> from java.net import *
>>> InetAddress.getAllByName("google.com")
array(java.net.InetAddress,[google.com/209.85.171.100, 
                            google.com/74.125.45.100,
                            google.com/74.125.67.100])



7

Bàn điều khiển linh hoạt cho phép bạn làm điều đó. Nó thực sự được dùng để thử và kiểm tra mã Groovy, nhưng vì groovy là một tập hợp siêu cấp của Java nên nó cũng cho phép những thứ Java thuần túy.

Tôi vừa nhập cái này vào bảng điều khiển:

InetAddress.getAllByName('localhost')

và nhấn CTRL-R, sau đó nó trả về:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]

7

Scala cũng cung cấp một bảng điều khiển tương tác. Tôi đã có thể sử dụng nó để lấy kết quả cho biểu thức trong câu hỏi của bạn bằng cách đủ điều kiện InetAddress, như trong:

java.net.InetAddress.getAllByName("localhost")

6

Trong khi JRuby , BeanShell , Julian Fleischer của REPL đang có REPL Albert Latacz của vẻ là mới nhất và hoạt động.

Đã thử nó với một định nghĩa lớp đơn giản, hoạt động tốt.

$ java -jar javarepl.jar
Welcome to JavaREPL version 56 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_17)
Type in expression to evaluate.
Type :help for more options.

java> public class Test {
    | public static void execute(String [] s) {
    |  System.out.println(54353 + s[0]);
    | }}

java> Test.execute(new String [] {"234343"});
54353234343

java> System.exit(0);

3

Đối với những người có quyền truy cập vào Mathematica, JLink cho phép bạn truy cập Java và tập lệnh với mã Mathematica:

Needs["JLink`"]
LoadJavaClass["java.net.InetAddress"]
InetAddress`getAllByName["localhost"]

Nhấn Shift-Enter để đánh giá và bạn nhận được

{<<JavaObject[java.net.Inet4Address>>}

Sau đó, bạn có thể sử dụng hàm Bản đồ của Mathematica để gọi toStringcác đối tượng được trả về:

#@toString[]& /@ %

để nhận được kết quả (hoặc sử dụng cú pháp ít tối nghĩa, Map[Function[obj, obj@toString[]], %]):

{"localhost/127.0.0.1"}

Nếu bạn bắt đầu nghiêm túc với điều này, bạn sẽ muốn đọc hướng dẫn của Todd Gayley tại http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html .


2

Nếu bạn đã biết Groovy (mà tôi cho là bạn biết, vì bạn đã đề cập đến Groovy Console), thì chỉ cần sử dụng groovysh hoặc groovyConsole, được bao gồm trong bản phân phối Groovy. Nếu bạn có các lọ tùy chỉnh mà bạn muốn nhập, bạn có thể viết một tệp loạt khởi động groovysh / groovyConsole với các tệp được thêm vào classpath. Bạn cũng có thể làm điều này

this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))

từ trong vỏ để tải các lọ khác.

Tôi đã từng sử dụng Jython vài năm trước để làm những gì bạn đang yêu cầu. Là một phần của tập lệnh xây dựng của tôi, tôi đã tạo một tệp jython.bat và .py tùy chỉnh bao gồm classpath đầy đủ cho dự án mà tôi đang làm việc. Theo cách đó, khi tôi bắt đầu Jython, nó sẽ có sẵn tất cả các mã và nó sẽ xuất hiện Spring để cho tôi chỉnh sửa mọi thứ trong hệ thống trực tiếp. Bạn có thể làm điều tương tự với Groovy, JRuby, BeanShell, v.v.


Tôi biết tôi có thể sử dụng Groovy shell, nhưng Groovy không có ngữ nghĩa chính xác như Java và không có tính năng kiểm tra kiểu. Vì vậy, có thể tôi có thể gặp lỗi biên dịch hoặc hành vi thời gian chạy khác nhau với một đoạn mã Java dường như hoạt động trong Groovy shell.
Dónal

groovy cũng sẽ tải tất cả lib trong ~ / .groovy / lib, bạn có thể sao chép nội dung trong đó hoặc sử dụng liên kết tượng trưng
Jason



1

Hầu hết các IDE đều có một cửa sổ được gọi là "chế độ ngay lập tức" cho phép bạn đánh giá mã java một cách nhanh chóng.


Eclipse có chế độ xem "hiển thị" gần với những gì tôi muốn. Vấn đề là, nó phải ở trong bối cảnh ứng dụng đang chạy. Tôi phải chạy một ứng dụng, dừng ở breakpoint và chỉ khi đó tôi mới có thể nhập những gì mình muốn.
Yoni Roit 29/12/08

@YoniRoit IMHO Tôi thích "hiển thị" + chế độ gỡ lỗi tốt hơn một dòng lệnh REPL. Tôi đã sử dụng REPL w / Python cách đây rất lâu nên tôi đã thực hiện cả hai. Tôi nghĩ sẽ tốt hơn nhiều khi viết Unit Test và đặt điểm ngắt và chơi với ngữ cảnh mong muốn trong khi dán bất kỳ mã nào hoạt động trở lại vào unit test. Lấy bối cảnh chính xác trong REPL đơn giản khó hơn nhiều so với nói Unit Test.
Adam Gent,

1

Bạn có thể xem BlueJ là một môi trường phát triển Java tương tác dùng để dạy OOP chứ không phải là IDE đầy đủ như Eclipse hoặc NetBeans. Dù sao thì cũng rất vui khi được chơi cùng.

Bạn có thể thấy nó hoạt động trên YouTube trong một loạt các hướng dẫn Java.


hay đấy. Bluej giống như một repl op. Không thực sự hữu ích cho những thứ bạn hiện đang sử dụng repl nhưng bạn có thể sử dụng nó để tạo mẫu thiết kế oo của mình như bạn sẽ sử dụng repl để tạo mẫu một phương pháp.
Bill K

1

DrJava là một IDE giáo dục bao gồm ngăn REPL.

Cũng có một plugin Eclipse, nhưng nó không hoạt động với tôi. Tôi nghĩ rằng nó đã không được cập nhật trong một thời gian. Vì vậy, những gì tôi thường làm là giữ một cửa sổ DrJava mở cho các câu hỏi "điều gì xảy ra nếu tôi làm điều này".

EclipseShell có thể cũng tốt, nhưng tôi chưa sử dụng nó.



1

Có một IDE đơn giản được gọi là DrJava có bảng điều khiển Tương tác. Nó hoạt động chính xác như tôi mong đợi. Chỉ cần tải một tệp và bắt đầu tương tác với các đối tượng trong đó.




1

JPad là một bàn di chuột java với REPL tích hợp:

C:\>jpad
       _ _____          _
      | |  __ \        | |
      | | |__) |_ _  __| |
  _   | |  ___/ _` |/ _` |
 | |__| | |  | (_| | (_| |
  \____/|_|   \__,_|\__,_|



Anything you type is evaluated as java.
The code is continuously appended until you call \clear.
Other Available Commands:
\exit - exit
\clear (n) - clear past java statements
\history - display all past java statements
\help - display this help

j>2+2
4
j>Math.sin(100.1)
-0.4177477
j>

Nó cũng thông minh về việc kết xuất các bộ sưu tập, danh sách, bản đồ, v.v. và cho phép hiển thị chúng dưới dạng bảng hoặc biểu đồ:

nhập mô tả hình ảnh ở đây


1

Java 9 đang cung cấp JShell.

jshell> println( "Print me!")
jshell> Print me!

0

Jython, JIRB cho JRuby, Groovy (groovyconsole và cộng sự) và Beanshell đều là những lựa chọn khả thi.

Tôi đã sử dụng InteractiveConsolecho Jython, nó thực sự hoạt động tốt trong ứng dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.