X



★★Java質問・相談スレッド180★★ [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/04/21(金) 22:13:17.42ID:Sf0TFsly
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※

質問時の心得
・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。
・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。

前スレ
★★Java質問・相談スレッド179★★
http://echo.2ch.net/test/read.cgi/tech/1476706523/
0313デフォルトの名無しさん
垢版 |
2017/07/09(日) 20:48:45.82ID:SZg5iNd3
>>312
基本的にはその通りで、呼び出し元が呼び出し先を知っている(依存している)場合はそれでいい。
でもそれだと都合が悪い場合もあって、例えば出来合いのボタンクラスはお前が勝手に作ったウィンドウクラスのことなど当然知らないから
ボタンクラスは自分がクリックされたとき何を呼び出していいかわからない。
そこでインターフェイスを介してメソッドを呼ぶことで、ボタンクラスがお前のウィンドウクラスを知らずともメソッドを呼び出せるという仕掛け。
これは見方を変えるとボタンクラスに呼び出してほしいメソッドを渡していると見做すこともできて、そういうやり方を一般に「移譲」と呼ぶ。
その移譲を使ってボタンクリックのようなイベントを実装したのがObserverであり、
移譲を使ってインスタンスの生成を一般化したのがAbstract Factoryだ。
GoFは個別のパターンの前に移譲の概念を確実に理解することを強くお勧めする。
0314デフォルトの名無しさん
垢版 |
2017/07/09(日) 21:46:09.06ID:sX6v1jPj
メディエイター(仲介者・管制塔)
A - M - B

A, B は、互いに依存しない。
疎結合

Aを修正しても、Bを修正しなくても良い。
逆もしかり

オブザーバー・メディエイターは、モジュール同士を疎結合にする。
部品の疎結合が、最も重要
0315デフォルトの名無しさん
垢版 |
2017/07/14(金) 13:03:36.96ID:TfMBM9Tu
初歩的な質問ですみません
privateメンバをもったクラスを継承してサブクラスで更新したいのですが、
サブクラスからだと更新できません。
この場合、getsetを親に持たせるのがやはり一般的なのでしょうか?
メンバをprotectにして直接更新するのはあまり良くないのでしょうか
0317デフォルトの名無しさん
垢版 |
2017/07/14(金) 18:46:33.01ID:WEwIJVh1
>>315
変更すべきならprivateにしてる設計が間違えてる
privateが正しいなら変更しようとしてるのが間違えてる
こーしたらこーなるからでプログラムしたいなら制約を科すオブジェクト指向言語を使うのが間違えてる
0318デフォルトの名無しさん
垢版 |
2017/07/14(金) 19:37:34.47ID:TfMBM9Tu
なるほど
では継承した子クラスから親の変数を変更しようとすること自体がおかしいということでしょうか
親に共通的に属性持たせて振る舞いだけ拡張していくのはよくあるやり方なのかと思っていましたがそうではないのですね
0319デフォルトの名無しさん
垢版 |
2017/07/14(金) 19:43:12.40ID:nYuZK0KO
どう作るかは正直どうでも良い
仕様が重要

目安としてそれぞれ別パッケージならsetter経由にしとけ
0320デフォルトの名無しさん
垢版 |
2017/07/14(金) 21:30:05.14ID:BgkaGQy5
>>315
getter, setter でやるのはそのクラスがその変数の変更タイミングを知る必要があるからだ。例えば書き換え直後に何か画面に描画するとかね。
変数の書き換えタイミングを知る必要がないならばその変数は public にして外部から直接書き換えられるようにしてしまえば良い。
外部から書き換える必要がないなら protected , 更に継承させたくないなら private。
0325デフォルトの名無しさん
垢版 |
2017/07/15(土) 18:10:31.86ID:+h55DWxy
目的がプログラムになってるヤツの多さは仕事においてもヤバい設計の教育はホント大事
0326デフォルトの名無しさん
垢版 |
2017/07/17(月) 02:36:58.37ID:7xO5Cpw7
昔のjava 1.5ぐらいで書かれたプログラムをNeon3でコンパイル通したいんだが、
javax.xml.ws とorg.apache.xmlrpcで検証が必要で、
それぞれ
「制約がありません。インポートパッケージjavax.xml.bindなんたらとか
エラーメッセージが出て、失敗してる。
コンソールで赤文字は
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [bundleresource://1080.fwk14070205:1/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [bundleresource://1080.fwk14070205:2/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
と出てる。 

パスかクラスか足り無そうなんだが、教えてください。
0327デフォルトの名無しさん
垢版 |
2017/07/17(月) 02:52:34.78ID:VDITljEv
>>326
なんでそのエラー見て「パスかクラスが足りなさそう」って考えに至るんだか
SLF4Jで使うロギングライブラリ実装がクラスパスに重複してんだよ
0328デフォルトの名無しさん
垢版 |
2017/07/17(月) 03:37:01.80ID:7xO5Cpw7
パス重複だったらしい。 自己解決。
0329デフォルトの名無しさん
垢版 |
2017/07/17(月) 03:37:50.02ID:7xO5Cpw7
>327 すいません。浅はかでした。ありがとうございました。
0331デフォルトの名無しさん
垢版 |
2017/07/17(月) 19:32:37.41ID:wLjexICy
スポンジの生地を生クリームでデコレートするか、チョコクリームでデコレートするかみたいなもんだよ。

実装的には、連想配列のプロパティにでも、生クリーム、イチゴ、板チョコみたいに持たす感じか?

インタフェースを加えていくいう実装もあるけど。
0335デフォルトの名無しさん
垢版 |
2017/07/18(火) 12:47:37.23ID:RUWZouC6
ま、デコレータは付加する部分を変えたクラスを作りやすくするパターンだからこんなもんでは?
たた、あまり必要ないような感じはするなあ。
付加する部分をパラメータで持たせてそれに応じて振る舞いを変えるようにするのがよくある作り方ではないか?
そうすると実行時に変更可能なようにも作れるしな。newした後で変えさせたくないならStringクラスみたいに変えられないように作ってしまえばいい。
0336デフォルトの名無しさん
垢版 |
2017/07/20(木) 09:43:44.11ID:5w/wCnPB
以前VMの勉強してたときにJVMを作ったことがあります。簡単なやつで全機能を作ったら訳じゃないですが。ガーベッジコレクタの実装を検討してて、今の公式のJVMの実装に疑問を持ちました。
ガーベッジコレクタは、定期的にインスタンスの参照カウントが0のものを掃除していく作りになってると思います。定期的にではなく、即時に最後の参照がなくなった時点で解放すればいいんじゃないの?っ思いました。
ガーベッジコレクタの解放のたいみんぐが分からなくてfull GCが急に動いてシステムが不安定になったとかよく聞く話なんですが、今のハードなら都度解放でも問題ないくらい性能出せると思うんです。
何か問題あるんですね?
0337デフォルトの名無しさん
垢版 |
2017/07/20(木) 10:28:21.35ID:lg4aQxIp
実際は、DecoratorとChain of Responsibilityはセットで使われることが多いような気がする。
どっちも委譲の典型的な使い方でしかない。
0338デフォルトの名無しさん
垢版 |
2017/07/20(木) 12:30:05.04ID:wo2Y+gw5
>>336
とりあえずOracle JVMのParallel GCについて話をすると、いちいち個々のオブジェクトの参照数カウントなんてやってない
New領域がいっぱいになったタイミングで初めてその時点の参照有無をチェックしてまとめてGCしてる
また、そのチェックするタイミングと実際に削除するタイミングで全スレッドを停止しなくちゃならん(Stop The World)

個々のオブジェクトに参照カウントをもたせて管理するような実装もできるだろうけど、
1つのオブジェクトのGCのたびに全スレッド止めてたらJVMの性能が落ちそうだし、
増える方はともかく参照切れを正しく全部拾えると思えないな
0339デフォルトの名無しさん
垢版 |
2017/07/20(木) 14:37:16.68ID:WTimusIq
参照切れを正しく拾えないって、どんな時にそうなるんだ?

確か参照カウント使って参照されなくなったらメモリ解放する方式は Delphi でやられていたと思うが、特に問題なくできてたと思うぞ。
(これの場合はコンパイラがバグってなければ大丈夫だよな?メモリ破壊するようなのを自分で書いてしまった場合は別かも知れんが)。
0340デフォルトの名無しさん
垢版 |
2017/07/20(木) 15:41:49.66ID:Pts20rgO
シングルスレッドだけなら参照カウントは比較的楽にできるかもしれんが
マルチスレッドの場合は参照カウントの読み書きは結構面倒くさい事になる。
0341デフォルトの名無しさん
垢版 |
2017/07/20(木) 16:01:16.55ID:wo2Y+gw5
>>339
あーごめんよ、自分が出来る気がしないだけ
変数がスコープを抜けた時に消すのはできそうなんだけど、null代入で参照切れるのをどうやって検出するのかなーと

JVMがやってる、とある時点のルートオブジェクトを起点として、参照を辿れないやつを参照切れとしてGCってのはわかりやすく感じる
0342デフォルトの名無しさん
垢版 |
2017/07/20(木) 20:46:36.89ID:oF4/pY7+
>>341
> null代入で参照切れるのをどうやって検出するのかなーと
代入直前に参照先の参照カウントをひとつ減らす(で0になったら解放する)だけ
ちなみにnullならなにもしなくていいけど他のオブジェクトへのポインタが代入されたらそのオブジェクトの参照カウントをひとつ増やしておく処理も必要
なのでそこそこオーバーヘッドがある
とりあえずWikipediaでも読んでおくれ
https://ja.m.wikipedia.org/wiki/%E5%8F%82%E7%85%A7%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88
0343336
垢版 |
2017/07/20(木) 21:13:22.75ID:tg7itWDQ
ありがとうございます。
参照切れのことを書いてくれてる人が多いですが、即時にでも後でGCが回収する場合でも、(被)参照カウントを減らすのは関数が終わっときか、例外が出たとき、代入したとき、など同じになるはずで、解放するタイミングが違うだけだと思うんですよね。
参照がなくなる契機となるニーモニックは沢山なかったとおもう。
(被)参照カウントを持たずに、GCが毎回全インスタンスがどのインスタンスを参照してるか見るってのは非効率な気がする。
オブジェクトの型を見てメンバー毎に参照先のリストを作る必要があるので。
0346336
垢版 |
2017/07/21(金) 09:07:38.51ID:DKEMbHjH
>>345
おー、ありがとうございます!疑問にに思ってたことそのものが書いてました。
0347デフォルトの名無しさん
垢版 |
2017/07/22(土) 21:36:50.77ID:ei2z0rG8
質問です
classを2つつくり、メインの方に身長、体重のデータを置いて、サブの方にbmi計算式(体重/(身長*身長))を置き、メインの方で結果を表示させるにはどうすればいいのでしょうか?
0348デフォルトの名無しさん
垢版 |
2017/07/22(土) 22:57:54.04ID:ZFWxmOeg
まずは入門書を一冊終えてきたほうが早いよ
そのレベルじゃ教えようにも言葉が通じない
0349デフォルトの名無しさん
垢版 |
2017/07/22(土) 23:05:20.55ID:8Y5yDecp
>>347
public abstract class Main {
 public static void main(String[] args) {
  Main main = new Sub();
  main.height = 1.70;
  main.weight = 70.0;
  System.out.printf("%.2f%n", main.calc());
 }

 double weight;
 double height;

 abstract double calc();
}

class Sub extends Main {
 @Override
 double calc() {
  return (double) weight / (height * height);
 }
}
0350デフォルトの名無しさん
垢版 |
2017/07/22(土) 23:28:37.15ID:ei2z0rG8
>>348 確かにまだ全然わからなくて苦戦してるので入門書買ってみます
>>349 実行しつつ、わからないところは調べてみます

ありがとうございました!
0352デフォルトの名無しさん
垢版 |
2017/07/26(水) 22:48:30.57ID:8fmFneIn
Java 7環境(ラムダもストリームもない)でコレクションの操作を快適に行うにはどうすればいいですか?
例えばオブジェクトのコレクションからプロパティのコレクションを作るといったような操作のたびに似たようなループ構造を持ったメソッドを書いていますがノイローゼになりそうです
0353デフォルトの名無しさん
垢版 |
2017/07/26(水) 22:56:28.28ID:3xAC3WuT
仕事なら諦めて猿のようにループを垂れ流せばいい
どうせ労働時間で給料貰ってるんだろ?
当然そのループ生産作業も見積工数のうちなんだから、お前は堂々と工数をドブに捨てていればよい
0358デフォルトの名無しさん
垢版 |
2017/07/28(金) 18:32:16.77ID:eEp80kEw
似たような作業が続いていると感じた時はツールを作成する機会。
今後も延々とループを書き続ける予感がするなら、
ループ構造をもったメソッドを自動生成するものを作れ。
ツール作成の手間と延々手作業を繰り返す手間との比較結果次第で。
0359デフォルトの名無しさん
垢版 |
2017/07/28(金) 18:48:58.94ID:8I0v3TDK
ソース自動生成は最後の手段であり極力避けるべき
自動生成されたコードは次第に独り歩きを始め、あっという間にメンテ不能な巨大なクソの山の出来上がり
0360デフォルトの名無しさん
垢版 |
2017/07/28(金) 19:22:14.69ID:eEp80kEw
たしかに節操なしに無計画にやるのは駄目だね。
まあノイローゼになるような作業のアウトプット自体がクソのような気もするが。
自身の精神のメンテも忘れず仕事がんばれ>352
0361デフォルトの名無しさん
垢版 |
2017/07/30(日) 16:55:36.37ID:0Cb6dJF4
asp.net coreやnode.jsのようにwebサーバー製品をインストールしないでhttpサービスを起動したいです
Javaでやるとしたらどんな選択肢がありますか?
0364デフォルトの名無しさん
垢版 |
2017/07/31(月) 10:33:23.33ID:JAkcdpof
・ソケットとストリームを使って自作する
・com.sun.net.httpserver.HttpServerを使う
0365デフォルトの名無しさん
垢版 |
2017/07/31(月) 14:24:42.85ID:mMpKpjgf
「ソケットとストリーム」の部分を見た瞬間なぜか「ソフトクリーム」の映像が思い浮かんだ。
やはり暑さは人を狂わせるな。
0374デフォルトの名無しさん
垢版 |
2017/08/02(水) 22:26:37.07ID:pW5qBrxf
46進数なら16
0376デフォルトの名無しさん
垢版 |
2017/08/03(木) 22:33:47.00ID:L3fwQXGH
伊代はまだ46進数で16だから〜
0377デフォルトの名無しさん
垢版 |
2017/08/04(金) 01:28:07.46ID:WxiBEpeD
底辺YouTuberを3年続けてたら、海外で企業と仕事が出来るようになった話
http://www.akiraca.com/archives/youtube
4,000人ものYouTuberをマネジメントする、その仕組みと裏側とは?
https://www.wantedly.com/companies/uuum/post_articles/56228
27歳で年収8億円 女性ユーチューバー「リリー・シン」の生き方
https://forbesjapan.com/articles/detail/17174
CNNがYouTuberを28億円で買収!?CaseyNeistatさんとは?
http://do-ra.org/2017/02/26/108694/
最新トップYoutuberの年収は10億円、1億円の時代はもう古い
http://www.himatubushisp.com/entry/2017/05/10/224945
youtubeの収入・いくら稼ぐのか?ユーチューバーの実態や広告の種類
http://www.yohey-hey.com/entry/youtube
人気YouTuberヒカルの月収5000万円!!!!!!月収やで!!!!
http://tamineta2.com/post-39920/
0379デフォルトの名無しさん
垢版 |
2017/08/05(土) 06:46:01.26ID:j+EOUu/i
HashSetの特定のkeyを指定して、streamを得るのってどう書いたらいいのか教えてください。
HashSet<string, string> aSet = ....;
Stream.of(aSet.get("aKey")).collect(...);
とか?書けるのでしょうか?
0381デフォルトの名無しさん
垢版 |
2017/08/05(土) 07:04:34.85ID:b1VYn167
>>379
プログラミング上達したいならまずその非論理的な考え方をやめろ
HashMapから値を取り出すことと、取り出した値に対するStreamを作ることは全くの別問題
0382デフォルトの名無しさん
垢版 |
2017/08/05(土) 08:20:01.70ID:POXKRSY3
直行する問題を分離できないプログラマやSEって意外と多いよね
だから未だにUIとDBが密結合したようなおかしなシステムばかり生産される
みんながみんな最低限の知性を持っているわけじゃないんだ
0385379
垢版 |
2017/08/05(土) 09:13:44.39ID:j+EOUu/i
>>381
うーん別問題ですか。Javaのstreamは難しいです。
今の所forループでベタに書いているのですが、streamに置き換えで効率化出来ないかと思いまして。

最初はFunctional IFでフィルタした結果をstreamに流し込めばいいのかなと思ったのですが上手く書けませんでした。途中から型が変わる様なのは許容されなかったので…

forループ以外のアプローチにはどういう方法があるか教えてください。
0386デフォルトの名無しさん
垢版 |
2017/08/05(土) 09:29:02.83ID:P20UcjsV
>>383
なんかおかしいか?
バグ調査の手法って
情報を収集する>仮説を立てる>実験(検証)する>フィードバックを得る
のループが基本だと思うけど
実験しないでどうやって調査するんだ
0387デフォルトの名無しさん
垢版 |
2017/08/05(土) 09:31:00.96ID:5oF9cacF
>>385
コレクションから要素1つ取り出してそれをストリームとか、それだけ聞いたら意味不明すぎて笑うレベル
小出しにしないでどういう処理をストリームにしようとしてるのか全部書け
0390デフォルトの名無しさん
垢版 |
2017/08/05(土) 09:40:30.90ID:b1VYn167
>>386
そのサイクルの目的は問題の原因箇所を特定すること
問題が起きたり起きなかったりするときのパラメータの組み合わせを特定するためではないよ
延々実験してる奴は大抵そこを履き違えてる
0391379
垢版 |
2017/08/05(土) 09:52:59.46ID:j+EOUu/i
>>389
ありがとうございます。参考になります。

自分が書いている内容が間違いでした。
やりたかったのは、

List<HashMap<string,string>> aList =...;

というものに対して、特定keyの値を取り出したstreamを得るという事でした。
...map(x -> x.get(aKey)).map().collect()
というのはエラーでした。

今は、forループで一つずつ別のArrayListに詰めてから、改めて処理しています。
0393デフォルトの名無しさん
垢版 |
2017/08/05(土) 12:46:26.43ID:pAL2FsqO
>>383
フールプルーフのGUIで意味もわからず全ての組み合わせから正解を探そうという育ちに基づいてるのかな
自由入力から理論に基づいて作り出さないとだ
0394379
垢版 |
2017/08/05(土) 13:20:28.63ID:j+EOUu/i
>>392
改めてありがとうございました。
上手く動きました。
0395デフォルトの名無しさん
垢版 |
2017/08/05(土) 17:28:20.99ID:xVRX2iSI
>>386
ソース読めば良いんじゃないかな。ていうか、ものによっては実験ではわからないバグもあると思うよ。

例えばこれはJavaではなくC言語での話だが、メモリ確保がおかしくて確保していない領域を読んで正常に動かない時があるプログラムがあった。
こういうのが中々見つからないのはメモリ確保していない不定値が詰まっている領域が停止させられることなく読めてしまい尚且つたまたま0が埋まっていたりして無視されてあたかも正常に動いているかのような状態になるからだ。
このたぐいのバグに対しては実験を繰り返しても偶然でしか発見できない。メモリの内容が偶然異常動作を引き起こす内容になっている時にデバッガで動かしながら確認してようやっと見つけるかまたはソース解析して見つけるかだろう。

Javaの場合はメモリ確保でこういうのはないが(あっても例外が出てすぐ気づくだろうが)、入出力が絡んだりして事前にどうなるかがわからない部分に対して検査が甘かったりすれば似たような事は起こるかもしれない。
0396デフォルトの名無しさん
垢版 |
2017/08/05(土) 18:24:07.44ID:QyI0bKK5
結局デバッガで実験してんじゃん
ソース読みながらうんうん唸るのは時間かかるし効率悪いよ
0397デフォルトの名無しさん
垢版 |
2017/08/05(土) 19:35:02.43ID:P20UcjsV
>>395
そういうのはメモリを正しく確保できてるかを検証するテストを書いて
境界値をメインにいろいろなパラメータを渡して何度も実験するんだろ
まさかコード見ただけで直してはいおしまいなんて無責任なことはしないよな普通
0398デフォルトの名無しさん
垢版 |
2017/08/05(土) 19:43:26.85ID:P20UcjsV
デバッガを使ったとしても結局は
いろいろなパラメータで
実際に動かして
結果を検証して
フィードバックを得る
をデバッガセッションの中でやってるだけだぞ
パラメータを与える方法やフィードバックを得る方法がデバッガでは豊富で手軽というだけでしかない
デバッグの根本的な手法は同じ
0399デフォルトの名無しさん
垢版 |
2017/08/05(土) 20:32:46.30ID:2VQydW7w
473非決定性名無しさん2017/08/03(木) 15:21:30.71

JIETに加入すれば誰でも3次60万からスタートだ。フリーランスのサイトをやってる
自称エージェントもそこから案件情報を取得しきてる。サイトで60万で釣って40万から55万の
間でやらしている。

446非決定性名無しさん2017/08/02(水) 22:12:48.95

JIETに毎月5千円払えば3次から入場できるだろ?
高額をうたうフリーランスのサイトはだいたい5次から45万円
JIETで閲覧応募できる末端価格からさらに搾取するのが高額をみせつけるフリーランスサイトでした
高額案件をみせつけるフリーランスサイトも案件の取得はJIETでした


自称エージェントはJIETから流れてくる案件を転売してるだけだった。
JIETに加入すれば誰でも案件に応募することができた。収入が40万50万台にならなくて済む
0401デフォルトの名無しさん
垢版 |
2017/08/06(日) 09:26:12.17ID:4/M1vW+Y
Javaでhtml5をビルドするためのビルダークラスってある?
オープンソースでもいい
0403デフォルトの名無しさん
垢版 |
2017/08/06(日) 09:44:53.85ID:Q3hkVqCh
HTMLをわざわざDOMで作る奴なんかいるんだろうか
業務でXML DOMとかORMのような無駄な抽象化のなされたものばかり扱ってると、テンプレートエンジンはエイリアンに感じるのかな
0404デフォルトの名無しさん
垢版 |
2017/08/06(日) 10:08:43.55ID:4/M1vW+Y
WebアプリじゃないからWebフレームワークは使わない前程です

ターミナルから起動して、業務上の計算を行い(ターミナルに途中経過を表示)、結果をhtmlファイル形式で出力する

これの最後の結果オブジェクトをhtmlに変換する処理を手軽に書きたいです
0407デフォルトの名無しさん
垢版 |
2017/08/06(日) 11:03:07.89ID:57DyNeAC
>>404
HTMLも所詮はテキストファイルなんだし、書式が固定ならHTMLに計算結果埋め込んでテキストファイルで保存すりゃいんじゃね?
0411デフォルトの名無しさん
垢版 |
2017/08/08(火) 12:14:43.90ID:ybbt0LUq
こんにちは
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況