Коротка відповідь: ні.
Java не генерує двійковий виконуваний файл, а лише байт-код, як це робить C # (CLI), і це не дуже добре для серйозного бізнесу у "відкритих середовищах" з двох основних причин:
- ймовірність потрапити в пастку в зворотному інженерії дуже велика, особливо це стосується старих і дуже добре відомих мов, таких як Java
- у вас немає повного контролю над роботами машини, у випадку з Java, JVM відіграє велику роль, приймаючи повний контроль.
Звичайно, у кожної мови є свої бібліотеки, але через велику кількість їх для кожної мови це не є справжньою проблемою, і я не думаю, що це мета цієї теми.
Можливо, на професійному рівні ви можете знайти щось, що може порушити таке правило, як dev-Kit, який може перетворити всі C # заяви в збірний код для реальної машини світу, але якщо такий підхід не в картках, до яких ви змушені практично враховуйте лише C і C ++ для своєї розробки, коли ви прагнете продавати свій товар у відкритому середовищі.
У мобільних пристроях речі дещо відрізняються, оскільки вони є "закритим середовищем", навіть Android суттєво закритий, враховуючи той факт, що джерела ПЗУ в реальному світі зазвичай не доступні для публіки, Android може вважатися відкритим кодом, але 99 % ROM на фактичних пристроях не є. У цьому випадку ви не можете занадто сперечатися, все вже встановлено для вас, і кожна платформа має свою мову, як всі знають.
Зрештою, якщо ви збираєтесь продавати цю продукцію у відкритих середовищах, я можу запропонувати лише мови, які можуть створювати компільований та двійковий / асемблерний код, у закритих середовищах рішення це з точки зору простіше зробити з різних причин.