jjzjj

java - 类没有被自动编译

coder 2024-06-05 原文

Javac 成功地重新编译了我所有的类,除了一个,我称之为“Box.java”的类。如果特别要求,Javac 会编译它:javac Box.java,但不会作为整个项目重新编译的一部分。

  1. 我是否认为这是因为事实证明存在一个名为“Box”的类(我认为是 Swing 的一部分,而且我在其他地方通常使用 Swing)?通过重命名我的类(和相关方法等)“DecisionBox.java”,问题似乎已经消失。

  2. 如果那是对的,那么将来最好的避免方法是什么。我可以很容易地找到 Java 保留字列表,但是保留类......?只搜索 JavaDocs?或者 IDE 会发现这个错误吗?

我之所以问,是因为没有错误消息,我花了很长时间才找到一个类没有被重新编译...

最佳答案

这在一定程度上取决于您如何编译整个项目,以及您的其他源文件如何使用 Box。

Java 编译器会自动编译依赖。您有一个名为 Box 的类,它与 javax.swing.Box 同名,这不是问题,因为包名称用于区分。

但是,例如,您正在编译的其他类可能都没有引用您的 Box。例如,如果您到处都import javax.swing.*,然后只使用Box,那么该类很可能正在使用javax.swing.Box。如果编译器总能将 Box 解析为 javax.swing.Box,它就没有理由编译你的 Box,因为就其而言,你永远不会使用它。

如果您为您的源文件使用默认包(即没有包),这可能会导致更多的潜在混淆。您希望保持井井有条,并尽可能明确地说明包。使用默认包意味着您无法明确限定自己类的名称。

可以肯定的是,请确保您是从包而不是 javax.swing.* 导入特定类,并且如果您需要同时使用 Boxjavax.swing.Box 在同一源文件中,明确指定包名称。

换句话说,听起来好像编译器在某些时候没有看到您的 Box 是您的类正在使用的——以及显式导入和使用完全限定的包名称可以消除这种混淆。

您可以尝试的一个实验是删除所有已编译的 .class 文件,然后重新编译您的项目。如果 Box.java 从未被编译,则暗示您实际上可能没有使用它,即使您认为自己在使用它。

从根本上说,如果有的话,这是不使用通配符包导入的好例子。通过始终显式导入您正在使用的类,您可以显着减少编译器对您的意图做出错误假设的可能性。这(并且,在较小程度上,不使用默认包)是避免将来出现这种情况的最佳方法。

更新,基于评论中的新信息:OP 有一个关系图,如:

 FirstClass
     Topic
         Boat
         DecisionBox

Boat/DecisionBox 修改后没有重新编译的原因是 Topic 没有改变。因此,当您重新编译 FirstClass 时,它会检查 TopicTopic 不需要重新编译,因此不会检查 Topic 的依赖项。如果 FirstClass 直接引用 Boat(甚至例如 Topic.getBoat()),那么 Boat 将被重新编译。这是 javac 非常基本的依赖遍历的一个缺点。在重新编译之前删除所有 .class,或者您可以使用其他一些构建系统,如 ant(您可以在其中指定依赖项)或您的 IDE 的内部系统(例如,大多数 IDE 会神奇地为您解决这个问题,尽管学习它当然很好命令行界面,实际上你很少在没有辅助构建系统的情况下使用它。


顺便说一下,另一种可能性是 Box.java 或已编译的 Box.class 上的一些不正确的时间戳导致编译器认为它没有't 改变,因此不需要重新编译。如果 .java 文件上的时间戳比 .class 文件更新,或者 .class 不更新,它只会重新编译文件存在。

关于java - 类没有被自动编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20084152/

有关java - 类没有被自动编译的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  3. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  4. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  5. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  6. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  7. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  8. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

  9. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  10. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

随机推荐