目次: Java
Javaのリフレクションを使ったコンストラクタの取得で躓いています。正解が分からない…。
あるクラスTestがあり、パラメータにクラスAしか取らないコンストラクタがあるとします。クラスTestのコンストラクタに対し、クラスAと全く関係ないクラスCのインスタンスを渡せばコンパイルエラーになります。クラスAの派生クラスBのインスタンスであれば渡せます。これはオブジェクト指向言語なら当たり前です。
しかしリフレクションを使ってコンストラクタを得ようとすると、派生クラスを渡せるコンストラクタをどうやって取得すれば良いかわからないのです。
public class Test {
    public Test(A a) {
    }
}
public class A {
    public A() {
    }
}
public class B extends A {
    public B() {
    }
}
public class Main {
    public static void main() {
        Test obj1 = new Test(new A()); //OK
        Test obj2 = new Test(new B()); //OK
        Constructor<Test> cons1 = Test.class.getConstructor(A.class); //OK
        Constructor<Test> cons2 = Test.class.getConstructor(B.class); //NG
        Test obj3 = cons1.newInstance(new A()); //OK
        Test obj4 = cons1.newInstance(new B()); //OK
        //Test obj5 = cons2.newInstance(new B());
    }
}
上記のようなコードがあったとします(try〜catchは省いています)。
クラスTestには、クラスAをパラメータにとるコンストラクタしかありません。従って、派生クラスBをパラメータに取るコンストラクタをくれ(=Test.class.getConstructor(B.class))と頼むと「そんなコンストラクタは無い」と例外がスローされます。
どうしてTest.class.getConstructor(B.class) としたとき、「ありません」なんだろうか?基底クラスを取るコンストラクタ(Test(A a))があるのだから、そちらを教えてくれれば良いのに…。
クラスTestには、クラスBを取るコンストラクタはないから、この動きは正しい。
とか、
基底クラスAを取るコンストラクタ(cons1)を得て、派生クラスBのインスタンスを渡せば良いだけだ。(つまりobj4を生成しているように書く)
という反論はわかるのですが、それだとせっかくのリフレクションなのに本末転倒になってしまいませんか?
クラスTestの利用者側の立場からすれば、クラスTestに、クラスAを取るコンストラクタがあるか?クラスBを取るコンストラクタがあるか?なんて知らないわけです。自分が呼び出したいコンストラクタが既にあるとわかっているなら、リフレクションなど使わずに直接呼べば良いのです…。
クラスTestのコンストラクタを全部取得して、クラスBの基底クラスを取るコンストラクタがないかどうか、全て探すしかないのでしょうか…。うーん、それはさすがに格好悪いような…。
 この記事にコメントする
 この記事にコメントする
目次: 車
先日レガシィを運び込んだ(2013年3月25日の日記参照)ディーラーから電話があり「バッテリーが完全に死んだのが原因」とのこと。説明を聞いていたのですが、どうも向こうの言う原因と今回の現象が繋がりません。
エラーが初めて出た日(水曜日)にはバッテリーは生きていたよ?
牽引前にJAFの方がブースター繋いだけどかからなかったよ?
バッテリーが完全に死んだのは牽引の直前だよ?
前にバッテリー上がったときは出なかったよ?
Er HCの意味は?なぜバッテリーが原因なの?
というようなことを聞き返したら「折り返し電話する」とのこと。なんだそりゃ…?
しばらくして2回目の電話。観念して(?)整備マニュアルを見つつ説明してくれたようで、やたら詳しかったです。ひとまず結論だけ一言でいえば「統合ユニットの誤報」でした。
と言われてもわかんないですね。覚えている限りですが、説明の要点は次の通り。
以上から所見としては「バッテリーの電圧が一時的に下がったか何かで、統合ユニットのメモリにエラーが生じ、Er HCエラーが出た。しかしバッテリー交換によりエラーが消えたところを見るに、エンジンや統合ユニットに異常はないと考えられる。」とのことらしいです。
修理代的な観点だとエンジン周りは壊れていないから、交換不要。バッテリーは死んでいたから、交換した。ってことです。
もう!最初からそうやって説明してくれれば良いのに!!って思った。でも後で良く考えたら、車に興味のない人に統合ユニットだ、CANだ説明したところで「はぁ?何それ?で、修理代いくらなの?」って言われるのが関の山だろうなあ。
一生懸命説明しても虚しいから、いつも端折って説明してきたのに、今回だけは(私が)やたら食いついてきたもんだから、観念して整備マニュアル引っ張ってきた、ってところでしょうか。単なる推測に過ぎませんが…。
 この記事にコメントする
 この記事にコメントする
目次: 車
前回の免許更新は免許センターまで行ったのですが、遠いわ、混んでいるわ、で辟易したので、今回は近所の警察署で更新しました。警察の方々の事務作業は手慣れたもので、まさに「流れ作業」という言葉がぴったりでした。
講習では道路交通法の5年前との変更点を習いました。結構変わっているもんだなあ。一番意味がわからなかったのは「右折可能信号でUターンして良くなった」ことです。
今までは青信号と、左折、直進、右折可信号の全点灯の違い(※)は、知る人ぞ知るって感じの豆知識でした。でも右折可信号でUターンOKとなると…いよいよ青信号との違いがわからなくなりますね。
(※)従来の青信号と、左折、直進、右折可信号の全点灯の違いは「Uターンしては行けない」でした。
エンジンが全くかからなくなった車(2013年3月20日の日記参照)をディーラーに持っていくため、JAFさんに来てもらいました。電話した後に、家の前の狭い丁字路(普通車がギリギリ)を思い出し「ここレッカー通れるか??」と不安を感じてたのですが…。
やはりというか何というか、JAFの作業員の方が、開口一番「ここの路地、かなり狭いですねー。牽引だと通れそうにないんですわ…。」と困っていました。やはりそうか…。しばし悩んだ後に、2つのプランで行くことになりました。
まずはプランA「車が自走すれば一番良いよね。」作戦です。ま、要は車を直そうと頑張るってことですね。しかしブースターを使っても全くエンジンは動かず、同じエラーを表示し続けるだけ…。切ない。
次にプランB「狭い路地をクリアするまでロープで曳き、その先で牽引!」作戦です。これは1人ではできないので、牽引側(トラック)をJAFの方、曳かれる側(レガシィ)を私が運転しました。
しかしこのエンジン掛かってないパワステのハンドルってやつは、重いのなんのって…。しかも途中でバッテリーまで死んで、メーターすら光らなくなり、車がいよいよダメになりました。
でもそんなこんなでなんとか広い路地に出ることができ、トラックで牽引してもらい無事、ディーラーへたどり着きました。や、良かった良かった。
家の前の路地といい、牽引の準備(※2)といい、まるでJAFへの嫌がらせみたいな状況でした…。別にわざとやったわけじゃないし、誰が悪いわけでもないのだけども…申し訳ない気分になるのはなぜかしら?
まあ、それはともかく。ありがとうJAFさん、感謝です。
(※2)レガシィは四駆なので、四輪全部浮かせないと牽引できません。そのため牽引準備の作業量が1.5倍くらいになってしまいます。
JAFへは、アパートの駐車場から電話したのですが、窓口のおねえさんが最後に「暖かい部屋の中でお待ちください。」と言って、会話を終えたのが印象的でした。
相手が外に居ることを察して、相手を気遣う何気ない一言を掛ける、ってのは、余所余所しいお礼よりもずっと心に響くんだなあ…。
 この記事にコメントする
 この記事にコメントする
目次: 車
今朝、同期の人たちと梅見に行くため車で出発しようとしたのですが、キーをSTARTまで捻ってもセルがピクリともしません。レガシィさん、なんというタイミングで壊れてくれるのだね…。
室内灯もカーナビも元気なのでバッテリ上がりではなく、ボンネットを開けてみても特に何かが漏れたり、外れているという様子もないのです。そもそもメカ系のトラブルなら何かしら動こうと頑張るはずですが、一切動かないのは何故だろう?
改めてキーをSTARTにしてメーターを見ていたら、走行距離計に「Er HC」の文字が出ていました。ネットで調べると「Er HC = 高速CAN通信エラー」とのこと。どうもECUか、ECU近辺の電装系が死んだようです。うーん、どうしようもないな…。
車はもう全く一切動かないので、ディーラーまでレッカーで運ばなければなりません。10年近く車に乗ってますが、レッカーのお世話になるのは初めてかも??
残念ながら近所のディーラーは定休日でしたので、修理はまた今度。
 この記事にコメントする
 この記事にコメントする
目次: PC
ノートPCの内蔵サウンドカード → ヘッドフォン出力、で音楽を聴いていると、音を出力開始する際に「バシッ」というノイズが載るのと、無音部分の「サー」というホワイトノイズが載るのがかなり気になります。
Windowsのサウンドカードのプロパティでいじれるところをいじってみましたが、サンプリングレートをいくつにしても、音の明瞭化を無効にしても何も変化がありませんでした…。
じゃあサウンドカードごと変えてしまおうと思い立って、最近流行のUSB DACを買ってみました。
USB DACは値段も数千円のものから、やたら高い(10万円超)ものまであって、みな、高音質であることを主張しています。が…、正直言って違いが良くわかりません。
大きさと値段で選んで、ONKYOのSE-U33GXV2にしました。追加ドライバを必要としないことと、24bit/96kHzという仕様から、USB Audio Class 1.0対応と思われます。
内蔵サウンドカードで問題になっていた点(バシっというノイズ、サーというホワイトノイズ)は全く聞こえません。この辺りはさすがです。
ですがしばらく使っていると、音が切れたり、音程が一瞬低くなったり、バリっとノイズが載ったりして、どうにも動きがおかしいです。
プレイヤーがいかんのか?と思って、foobar2000 v1.2.3とWASAPIプラグイン3.2.3に替えてみましたが、eventモードでもpushモードでも症状は同じです。
いろいろ設定を変えていたら原因に行き当たりました。出力のビット数(※)です。
出力フォーマットのビット数が24ビットだと先ほどのような問題が起き、16ビットに変更すると安定して動作するようです。
せっかく筐体に金色の文字で「24bit/96kHz」と書いてあるのに、24ビット出力は使いものにならないとは、また斬新な製品ですねえ。
(※)foobar2000のPreferences - Playback - OutputのOutput Data Formatです。ビット数は8, 16, 24, 32ビットの4択ですが、8と32はサポートしていないとエラーが出るので、実質16, 24ビットの2択です。
環境は下記の通り。
なおかつfoobar2000の設定を以下のようにします。とにかくバッファらしきものは全部排除です。
この設定だと1〜2分に1回は、音が歪んだり、音程が下がったり、音が切れます。Output data formatを16-bitにすると10分以上聴いていても何も起きません。
これが何かのヒントになれば幸いです。
 この記事にコメントする
 この記事にコメントする
| < | 2013 | > | ||||
| << | < | 03 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 | 
| - | - | - | - | - | 1 | 2 | 
| 3 | 4 | 5 | 6 | 7 | 8 | 9 | 
| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 
| 17 | 18 | 19 | 20 | 21 | 22 | 23 | 
| 24 | 25 | 26 | 27 | 28 | 29 | 30 | 
| 31 | - | - | - | - | - | - | 
 25年10月6日
 25年10月6日
 25年10月6日
 25年10月6日
 25年9月29日
 25年9月29日
 25年9月29日
 25年9月29日
 20年8月24日
 20年8月24日
 20年8月24日
 20年8月24日
 16年2月14日
 16年2月14日
 16年2月14日
 16年2月14日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 24年6月17日
 24年6月17日
 24年6月17日
 24年6月17日
 wiki
 wiki Linux JM
 Linux JM Java API
 Java API 2002年
 2002年 2003年
 2003年 2004年
 2004年 2005年
 2005年 2006年
 2006年 2007年
 2007年 2008年
 2008年 2009年
 2009年 2010年
 2010年 2011年
 2011年 2012年
 2012年 2013年
 2013年 2014年
 2014年 2015年
 2015年 2016年
 2016年 2017年
 2017年 2018年
 2018年 2019年
 2019年 2020年
 2020年 2021年
 2021年 2022年
 2022年 2023年
 2023年 2024年
 2024年 2025年
 2025年 過去日記について
 過去日記について アクセス統計
 アクセス統計 サーバ一覧
 サーバ一覧 サイトの情報
 サイトの情報合計: 
本日: