2009-01-14 22 views
39

Tôi cần chuyển đổi ứng dụng Java 1.5se thành C# 2.0.Tôi có thể tìm trình chuyển đổi Java sang C# ở đâu?

Có ai biết về một công cụ (tốt nhất là mã nguồn mở/miễn phí) để thực hiện việc này không?

+3

Sử dụng công cụ tốt nhất. Các ngón tay và bộ não của bạn.

+1

Đã thêm tiền thưởng vì Trợ lý chuyển đổi ngôn ngữ Java không còn nữa. Tôi đã tìm thấy Sharpen, nhưng có công cụ nào khác cho điều đó không? – Residuum

Trả lời

15

Java Language Conversion Assistant. Tùy chọn cài đặt với (ít nhất) Visual Studio 2005 Standard Edition.

Chọn Trợ lý chuyển đổi tệp/Mở/Chuyển đổi/Ngôn ngữ Java.

Hãy nhớ truy cập mã theo cách thủ công sau đó. Nó sẽ có rất nhiều vấn đề.

+0

Có phương án nào khác trong việc chuyển đổi Java sang C# không? Tôi đã sử dụng thành công VS2005 để chuyển đổi mã Java thành C# với không quá nhiều sửa đổi bằng tay và tôi thực sự thích nó. – Gant

+6

Không chỉ nó sẽ có vấn đề ở cấp độ triển khai, nhưng nó sẽ không được thiết kế theo cách thành ngữ .NET. Một lần nữa tôi nói, tay chuyển ... –

+0

Đá công cụ !! Cảm ơn – CSharpDevLondon

27

Ngay cả khi có công cụ như vậy, tôi khuyên bạn nên thực hiện chuyển đổi bằng tay. Trình biến đổi tự động thường sẽ tái tạo lại mã một cách trung thực, nhưng bỏ qua các thành ngữ - bởi vì chúng thực sự rất khó để có được quyền.

Hơn nữa, sự khác biệt giữa Generics trong .NET và Java có thể dẫn đến một số quyết định rất khác nhau trong hai codebases.

Thực sự, bạn sẽ tốt hơn khi thực hiện nó bằng tay.

+0

Tôi đồng ý. Tôi đã xem xét Trợ lý chuyển đổi ngôn ngữ Java cho một dự án tương đối nhỏ và công việc dọn dẹp cần thiết sau khi chuyển đổi không nhỏ hơn đáng kể so với công việc cần thiết để viết lại. –

+0

Ditto, nhưng nhiều hơn một lần mặc dù nhấn mạnh một cách dứt khoát các khách hàng tương ứng. –

13

ikvm lộ lớp java trong .NET. Nó không phải là một công cụ chuyển đổi, nhưng dựa trên kinh nghiệm của tôi, tôi khuyên bạn nên chuyển đổi nó sang bất kỳ ai thực hiện chuyển đổi từ java sang .NET

7

Trong khi cú pháp của hai ngôn ngữ có vẻ giống nhau, ngữ nghĩa khác nhau. Để đề cập đến một vài nơi hai ngôn ngữ đi lạc lối

  • Generics, Java biên dịch tất cả mọi thứ để các đối tượng, C# vẫn giữ được kiểu generic
  • Exceptions, Java đã kiểm tra trường hợp ngoại lệ, C# không
  • lớp Anonymous và bên trong các lớp, Java có các lớp ẩn danh và các lớp lồng nhau, C# không có. Thay vào đó C# có các đại biểu và sự kiện. Do đó, mô hình lập trình là rất khác nhau
  • đại biểu, C# có khái niệm về các con trỏ hàm dẫn đến một cách lập trình khác.
  • sự kiện, C# có khái niệm về các sự kiện và thành phần dẫn đến một cách lập trình khác.
  • API, đặt tất cả các khác biệt ngữ nghĩa sang một bên, cả hai ngôn ngữ đều có một API khổng lồ, không phải trong số đó được chuyển đổi một cách trivially.

Nói cách khác, bạn sẽ không thể tự động chuyển đổi như vậy. Nếu lý do thay đổi thành C# là có thể dịch mã của bạn thành tệp .exe, có nhiều tùy chọn khác nhau trong thị trường Java.

+0

C# không có lớp lồng nhau. Tôi nghĩ rằng bạn đã sai vì vậy tôi đã làm một chút nghiên cứu và có vẻ như các lớp bên trong (một điều Java) là khác nhau từ các lớp lồng nhau (hiện diện trong cả hai). Một thú vị nếu tinh tế tối nghĩa. –

+0

Có các lớp bên trong và các lớp lồng nhau không giống nhau. –

23

Một công cụ tốt để sử dụng được gọi là Sharpen, là mã nguồn mở.

Công cụ này đã được chia nhỏ và cập nhật bởi nhóm Xamarin và họ đã sử dụng công cụ này để dịch API Android thành C#.bản sao của họ có thể được tìm thấy ở đây:

+5

Nhóm Mono vừa phát hành phiên bản mới của Sharpen mà họ đã sử dụng để dịch Android sang C#. https://github.com/xamarin/XobotOS – pnewhook

+0

FYI Sharpen là một plugin eclipse. – Jess

+0

Ngoài ra còn có phiên bản Sharpen/port cho dòng lệnh: https://github.com/mono/sharpen –

5

Ngay bây giờ, tôi đang thử nghiệm giải pháp hữu hình (mà không phải là miễn phí)

Tangible Source Converter

Và nó thêm một Helper Lớp . Nhưng bên ngoài nó, kết quả có vẻ ổn.

Java: (bản gốc)

public class PackVariableArrays { 


private ClassError myerror=new ClassError(); 


public VariableArrays unpack(String txt) { 
    VariableArrays pc = new VariableArrays(); 
    Variable lc; 
    txt=txt.replace("\r\n","\n"); 
    setMyerror(new ClassError()); 
    if (txt==null) { 
     lc=new Variable(); 
     lc.name="ERV-5: Empty values"; 
     pc.addItem(lc); 

     return pc; 
    } 
    String[] linecode = txt.split(ClassUtil.SEPARATOR2); 
    int blen = 0; 
    int tmpint = 0; 

    int numelement = 9999; 

C# (chuyển đổi)

public class PackVariableArrays { 


    private ClassError myerror =new ClassError(); 


    public virtual VariableArrays unpack(string txt) { 
     VariableArrays pc = new VariableArrays(); 
     Variable lc; 
     txt=txt.Replace("\r\n","\n"); 
     Myerror = new ClassError(); 
     if (txt==null) { 
      lc=new Variable(); 
      lc.name="ERV-5: Empty values"; 
      pc.addItem(lc); 

      return pc; 
     } 
     string[] linecode = StringHelperClass.StringSplit(txt, ClassUtil.SEPARATOR2, true); 
     int blen = 0; 
     int tmpint = 0; 

     int numelement = 9999; 

Đó là một trường hợp đơn giản nhưng nó hoạt động tốt. Tuy nhiên, như tôi đã nói đầu, nó sử dụng một lớp Helper (StringHelperClass.StringSplit) đó là tốt nhưng nó là không cần thiết. Bên ngoài nó, mã kết quả khá rõ ràng.

2

Bạn đã thử XMLVM? Nó có một tùy chọn để tự động chuyển đổi sang C# như thế này:

xmlvm --in=myjar.jar --out=output_dir --target=csharp 
0

Gần đây Xamarin đã chuyển android để mono sử dụng làm sắc nét. Kiểm tra liên kết this.

Các vấn đề liên quan